0

请帮我

我有

public partial class OrderControl : UserControl
{
    private OrderHeader orderHeader;
    public Customer selectedCustomer { get; set; }
    private Customer[] allCustomers;
    public User selectedManager { get; set; }
    private User[] allManagers;


    public OrderControl()
    {
        InitializeComponent();
        DataContext = this;
    }
...
}

我需要一种绑定到源的方式:

<ComboBox Name="CustomerComboBox" SelectedItem="{Binding selectedCustomer}"/>

这是将 selectedCustomer 属性保留在 OrderControl.xaml.cs 中的最佳方法,还是我需要使用 ..,selectedCustomer,... 属性创建一些 OrderViewModel 类并在 OrderControl.xaml.cs 中保留 OrderViewModel 的实例?

谢谢

4

3 回答 3

0

最好创建一个 ViewModel 类,将您的属性移动到该类并使其成为DataContext您的UserControl.

此外,您的selectedCustomer属性只是一个常规的 .NET 属性,它需要支持 INotifyPropertyChanged 接口以促进绑定和更改通知...通常是ViewModel您的所有其他ViewModel类继承的基类将实现此接口...

于 2012-07-19T18:02:59.753 回答
0

如果你想创建真正的用户控件,你不应该:

 DataContext = this;

这是HB的报价

这是不好的做法,像这样设置 DataContext 是“从外部”不可见并且不切实际的,因为 DataContext 的继承通常是您想要和期望的

是类似的问题和答案。

但是如果你想先用 viewmodel 做 MVVM。

来自雷切尔的引述:

请记住,使用 MVVM,您的 ViewModel 就是您的应用程序。View 只是一个漂亮的界面,它允许用户与您的 ViewModel 进行交互。

这意味着您应该使用所需的所有属性和命令创建适当的视图模型。从您的用户控件中删除所有代码,因为它现在只是一个视图。viewmodel 首先通过 datatemplates 连接 viewmodel 和 view。

于 2012-07-20T06:49:20.347 回答
0

如果您实施 INotifyPropertyChanged,这将起作用。现在,组合框无法在设置属性时获取更新。请参阅http://msdn.microsoft.com/en-us/library/ms229614.aspx

但是,如果您希望遵循 MVVM,那么您将需要创建一个视图模型对象。

于 2012-07-19T18:05:37.127 回答