我是MVVM和WPF的新手,我有点困惑。
我们说我有2个型号,如下:
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
}
和
public class Product
{
public int Id { get; set; }
public Category Category { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
我不确定实施ProducViewModel
类添加新产品的推荐方法是什么:
是否可以使用Product
类型的公共属性并将其绑定到视图,如下所示:
public class ProductViewModel : Screen
{
private Product _product;
public BindableCollection<Category> Categories;
public ProductViewModel(Product product, BindableCollection<Category> categories)
{
_product = product;
Categories = categories;
}
public Product Product
{
get { return _product }
set
{
_product = value;
SetAndNotify(ref _product, value);
}
}
}
在这种情况下,我将使用表单中的Category
集合来选择一个类别。
我的观点应该是这样的:
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<Label Content="Catgory" />
<ComboBox
ItemsSource="{Binding Categories}"
DisplayMemberPath="Name"
SelectedValue="?????? What comes here? "/>
</StackPanel>
</StackPanel>
这是对的吗?
另外,我如何在视图中的Product.Category
中绑定ComboBox
?
谢谢!
答案 0 :(得分:0)
在视图模型中,您应该公开视图中所需的属性。在这种情况下,您可以直接绑定到Product.Category或在视图模型中创建新属性,我认为最后一个选项非常适合MVVM场景。
在您的情况下,您应该创建ProductViewModel的选定类别属性:
public Category SelectedCategory { get { return _selectedCategory; }
set
{
_selectedCategory = value;
SetAndNotify(ref _selectedCategory, value);
Product.Category = _selectedCategory;
} }
然后在你的xaml中,你将组合框的选定值绑定到这个新属性:
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<Label Content="Catgory" />
<ComboBox
ItemsSource="{Binding Categories}"
DisplayMemberPath="Name"
SelectedValue="{Binding SelectedCategory}"/>
</StackPanel>