如果usercontrol的datacontext是视图模型,如何绑定到xaml代码隐藏中的属性?

时间:2014-03-31 14:19:27

标签: c# wpf xaml mvvm user-controls

我有一个UserControl,他将DataContext设置为ViewModel的一个实例(使用MVVM)。但是,我在UserControl中有控件需要绑定到仅与视图相关的属性(这就是我将它们放在代码后面的原因)。我不确定如何在xaml中正确绑定它:

注意:SelectedOrderType是View-Model上的属性,OrderTypes是UserControl本身的属性。

<UserControl x:Class="MyNamespace.OrderControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Name="OrderUserControl">
  <Grid>
    ...
    <ComboBox ItemsSource="{Binding Path=OrderTypes, ElementName=OrderUserControl}"
              SelectedValue="{Binding Path=SelectedOrderType}"
              SelectedValuePath="OrderTypeCode"
              DisplayMemberPath="OrderTypeName" />
  </Grid>
</UserControl>


public partial class OrderControl : UserControl
{
    public OrderControl()
    {
        InitializeComponent();

        OrderTypes = ...;
    }

    public IReadOnlyCollection<OrderTypeInfo> OrderTypes { get; private set; }
}

另外,我知道我可以简单地在View-Model上创建一个属性,我知道有些人会认为这是正确的地方......但我真的很想知道我怎么做如果不是针对这种情况,可以做我试图做的事情,也许是将来的其他情景?

1 个答案:

答案 0 :(得分:0)

我可能错了,但是你不需要为你的用户控件创建一个依赖属性&#34; SelectedOrderType&#34;并将View Model绑定到该属性,而不是直接从用户控件绑定到视图模型。

那样你的UserControl不依赖于视图模型?

编辑:

我认为您可以按照它的方式进行设置,但SelectedOrderType的绑定需要类似于{Binding Path = DataContext.SelectedOrderType,ElementName = OrderUserControl}