這就是MVVM使用ViewModel的原因。
不要修改模型,而是根據視圖的需要創建ViewModel類。那就是你不想要的屬性的地方。
編輯
這裏是這樣做的一種方式:
public class ItemTypeViewModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged("Name");
}
}
}
private string category;
public string Category
{
get { return category; }
set
{
if (category != value)
{
category = value;
OnPropertyChanged("Category");
}
}
}
public static ItemTypeViewModel FromModel(ItemType model)
{
var itemTypeViewModel =
new ItemTypeViewModel
{
Name = model.Name,
Category = categories[model.CategoryID].Name;
};
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
var p = PropertyChanged;
if (p != null)
{
p(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class ItemTypesViewModel : ObservableCollection<ItemTypesViewModel>
{
private ObservableCollection<ItemTypeViewModel> _collection;
public ObservableCollection<ItemTypeViewModel> Collection
{
get { return _collection; }
set
{
if (_collection != value)
{
_collection = value;
OnPropertyChanged(new PropertyChangedEventArgs("Collection"));
}
}
}
}
使用靜態方法在模型創建ItemTypeViewModel
的情況下,每個ItemType的。把它們全部放在ItemTypeSViewModel
的'Collection'屬性中。
將DataGrid綁定到集合。
我從我的ViewModel中刪除了模型中ItemType和ItemCategory之間存在的關係。這只是處理這種構造的一種方式。相反,您也可以爲ItemCategory創建ViewModel類,並將ItemTypeViewModel類中的引用添加到ItemCategoryViewModel類的實例中。
請注意,這只是處理此問題的一種方法。你也可以用其他方式解決這個問題。另外:您還需要提供從ViewModel類到Model的轉換。
提醒的最後一點:https://stackoverflow.com/questions/2267903/learning-mvvm-for-wpf
我對每個視圖使用一個視圖模型並從數據庫中獲取數據。 As ObserableCollection並將它們綁定到我的視圖網格。我應該做什麼改變? –
thewayman
創建一個包含您在用戶界面中所需的屬性和命令的類(這是一個ViewModel類,它應該實現INotifyPropertyChanged)。從數據庫加載模型類後,使用來自這些模型的數據加載ViewModel類)將網格綁定到ViemModel類。我會給我的答案添加一個例子。 –
@Taufiq:我添加了一個例子。 –