遵循此模式:
這部分是你的模型類應該看起來怎麼樣, 即使您使用實體框架來創建模型,他們繼承INPC ..所以都好。
public class Model_A : INotifyPropertyChanged
{
// list of properties...
public string FirstName {get; set;}
public string LastName {get; set;}
// etc...
}
每個視圖模型是信息子集來看待,所以你可以有相同的模型類多視圖模型,請注意,如果您撥打電話到無參數的C-TOR你將在視圖模型中使用的模擬模型的自動實例。
public class ViewModel_A1 : INotifyPropertyChanged
{
public Model_A instance;
public ViewModel()
{
instance = new instance
{ //your mock value for the properties..
FirstName = "Offer",
LastName = "Somthing"
};
}
public ViewModel(Model_A instance)
{
this.instance = instance;
}
}
這是爲了您的觀點,如果您在ide設計器中查看,您將有一個模擬視圖模型來顯示。
public class View_For_ViewModelA1
{
public View_For_ViewModel_A1()
{
//this is the generated constructor already implemented by the ide, just add to it:
DataContext = new ViewModel_A1();
}
public View_For_ViewModel_A1(ViewModel_A1 vm)
{
DataContext = vm;
}
}
XAML方:
<Window x:Class="WpfApplication1.View_For_ViewModel_A1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ViewModel="clr-namespace:WpfApplication1"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
d:DataContext="{d:DesignInstance ViewModel:ViewModel_A1, IsDesignTimeCreatable=True}"
Title="Window1" Height="300" Width="300">
<Grid>
<TextBox Text="{Binding FirstName}" />
<TextBox Text="{Binding LastName}" />
</Grid>
</Window>
在你希望有一個單一的視圖模型類,涉及多個模型類更高級的場景..但你總是應該設置綁定到一個視圖一個單一的視圖模型。 如果你需要用你的代碼功夫 - 確保你在你的視圖模型層做到這一點。 (即創建一個視圖模型,有幾個不同型號的實例)
注意:這不是mvvm的完整模式。在完整模式中,您可以通過您的模型暴露與模型中的方法相關的命令視圖模型並且可以綁定到您的視圖。 祝你好運:)
好吧,我已經在這個充滿的代碼,我只得到一個錯誤,雖然「MemberViewModel是一個屬性,但被使用。像一個類型「它顯示了每個人。知道我錯過了什麼? – Offer
如果我沒有弄錯,DataContext被放在與初始化組件相同的部分是嗎? – Offer
兩件事物具有相同的名稱,更改屬性的名稱。我綁定在頁面的加載事件中。像這樣.Loaded + = MyPage_Loaded; – JBrooks