MVVM模型绑定初学者

时间:2017-03-19 11:24:24

标签: wpf mvvm data-binding

我是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

谢谢!

1 个答案:

答案 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>