【问题标题】:How do you bind to a property in a xaml code-behind if the usercontrol's datacontext is a view-model?如果用户控件的数据上下文是视图模型,如何绑定到 xaml 代码隐藏中的属性?
【发布时间】:2014-03-31 14:19:26
【问题描述】:

我有一个 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 上创建一个属性,并且我知道有些人会建议将其放置在正确的位置...但我真的很想知道如何才能如果不是为了这个场景,也许在未来的其他场景中,做我正在尝试做的事情?

【问题讨论】:

    标签: c# wpf xaml mvvm user-controls


    【解决方案1】:

    我可能错了,但您是否不需要在用户控件上为“SelectedOrderType”创建依赖属性并将视图模型绑定到该属性,而不是直接从用户控件绑定到视图模型。

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

    编辑:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多