2009-06-11 17 views
5

ViewModel'i Görünüm'e bağlamanın iki yolunu görebiliyorum. Biri XAML'de ve diğer kodlar da arkadaki kodda.ViewModel'i Silverlight'ta Görünümüne Bağlama

Hangi yöntem daha çok tercih edilir? Ben xaml yöntemini tercih ediyorum çünkü kodda hiç kod istemiyorum, ama diğeriyle ilgili bir sorun var mı?

<navigation:Page x:Class="MyNamespace.MyViewModel" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ViewModel="clr-namespace:MyNameSpace.MyViewModel" 
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
    Title="ViewModel Page" > 

    <navigation:Page.Resources> 
     <ViewModel:MyViewModel x:Key="ViewModel"></ViewModel:MyViewModel> 
    </navigation:Page.Resources> 

    <Grid x:Name="LayoutRoot" Background="White" 
      DataContext="{StaticResource ViewModel}"> 

    </Grid> 
</navigation:Page> 

VEYA

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using System.Windows.Navigation; 

namespace MyNamespace 
{ 
    public partial class MyView : Page 
    { 
     public MyView() 
     { 
      InitializeComponent(MyViewModel viewModel); 

      this.DataContext = viewModel; 
     } 
    } 
} 

cevap

3

Shawn'ın iyi bir yayını önce View or ViewModel var. VM'nin XAML'ye sahip olması, size Serinlik olan (Blend'deki örnek verileri görmek) size kolaylık sağlar, ancak fiyat, bilgiyi tekrar View'a geri itmek zorundadır. John Papa bu nedenle bu yaklaşımdan uzaklaştı.

Shawn'ın Evlilik fikrini kullanıyorum (yukarıdaki bağlantıya bakın).

HTH -Erik

+0

Hmm .. bağlantı için teşekkürler. Şimdi okuyacağım. Sanırım birkaç kez daha okumalıyım çünkü bir şey alamıyorum. Shawn, "Her iki yöntemde de görüş modelinin görüşünün yapışkanlığını sevmemeye eğilimliyim. Ayrıca, her ikisi de ortak bir durum olsa da, her zaman durumun olmadığı bire bir ilişkiyi ima ediyor. ." Ancak, İlk Bakışta, birçok görüntüleme bir VM'ye veri olarak gönderilebilir. Bir görünüm birden fazla VM'ye bağlı olabilir mi? hmmm .. Yine, eğer V'niz farklı VM'lere bağlı olmak isteyebilecek basit bir ızgaraysa sanırım. –

+0

Şimdiye kadar, Vs ve VM'ler arasında bire bir ilişki tutmanın hayranıyım. Bu bir hiyerarşiye karşı olduğum anlamına gelmez. Yani, bir Görünüm kendi VM'sine sahip alt görünümler içerebilir ve bunun oldukça iyi çalıştığı görülmüştür. –

+0

Uygulamada, yalnızca veri satırlarını görüntüleyen Standart ızgara görünümü var. Bu veriler farklı ViewModel'lerden olabilir, bu yüzden tek tek tutulması bizim için anlamlı değildir. İçerdiği veriler haricinde, hepsi aynı olduklarında birden çok Grid Görünümüne sahip olmanın hiçbir anlamı yoktur. –

0

buradan ettik yolu ben XAML ile gider. DataContext özelliğine ayarlamak için başka yollar vardır. İlgileniyorsanız, WPF için Microsoft CAG çerçevesine bakın.

0

nedeniyle View bu marka test çok daha kolay kod VM kurdum. Justin Melek bunun için büyük bir mesaj vardır:

public partial class Page : UserControl 
{ 
    private PageViewModel _viewModel = new PageViewModel(); 

    public PageViewModel ViewModel 
    { 
     get { return _viewModel; } 
     set { _viewModel = value; } 
    } 

    public Page() 
    { 
     InitializeComponent(); 
     this.Loaded += new RoutedEventHandler(Page_Loaded); 
    } 

    void Page_Loaded(object sender, RoutedEventArgs e) 
    { 
     this.DataContext = ViewModel; 
    } 

} 

MVVM desen çevreleyen test intricasies öğrenmeye için çok yararlı olabilir üzere görevini buldular. Ben bir sınıf kullanmak

http://silverlight.net/blogs/justinangel/archive/2009/02/25/silverlight-unit-testing-rhinomocks-unity-and-resharper.aspx

+0

Bağlantı için teşekkürler. Hala okuyordum ama şu an Shawn'un yöntemini tercih ediyorum. Bunu düşünmek için biraz daha zaman harcamam gerekiyor ama açıkça ayrıştırılmış bir VM ve V istiyorum. –

4

MVVM üçlüsünü işleyen bir "Ekran" dub. VM'ye enjekte edilen bir V'ye, sonra da V'de bir kaynak olarak VM'ye başladım, ama sonunda Ekran konsepti benim için en iyi şekilde çalıştı. Birbirine bağlı olmadan bir V ve bir VM kullanmamı sağlıyor. Ayrıca genel sunum çerçevemdeki diğer işlevleri de özetliyor. VM Ekranında oluşturulduğunu

public CatalogItemScreen(IUnityContainer container) : base(container) 
    { 
     this.ViewModel = Container.Resolve<ICatalogItemViewModel>(); 
     this.View = Container.Resolve<CatalogItemView>(); 
     this.View.DataContext = this.ViewModel; 
    } 

Bildirim V burada oluşturulur ve 2 birbirine bağlıdırlar: İşte bir örnek olarak benim Ekran sınıfının yapıcı olduğunu. Bu örnek Birlik ve Prism kullanır, ancak bunu başarmak için gerekli değildir.

İlgili konular