【问题标题】:How to set a property of a property in XAML?如何在 XAML 中设置属性的属性?
【发布时间】:2013-08-07 15:40:32
【问题描述】:

我有一个用户控件作为我的视图(名为 MyView),它的数据上下文设置为我的视图模型(MyViewModel 类型)的一个实例。
我在视图的代码隐藏中有一个只读属性(即 MVVM-Light sn-p),如下所示:

public MyViewModel Vm
{
    get { return (MyViewModel) DataContext; }
}

MyViewModel 有一个名为 Title 的字符串类型的属性,我想通过 XAML 更改它,因为 MyView 被用作 ItemTemplateListBox

<ListBox ItemsSource="{Binding MyViewModelCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Controls:MyView /> <!-- How do I set Vm.Title property here? -->
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我该怎么做?
或者也许有更好的方法?

【问题讨论】:

  • 你的方法是倒退的。如果您已经有一个 VM 集合,为什么不在该集合的项目中操作此类属性?
  • @HighCore Care 进一步解释一下?我不完全明白。
  • 您的列表框项目来自哪里? MyViewModel 的集合,对吧? - 那么,为什么你坚持要改变视图中的数据,而不是视图模型本身呢?您似乎误解了 MVVM 的一些核心概念
  • @HighCore 哦!我之前尝试过,但它并没有那么顺利,所以 SO 中的一些答案让我觉得这是一个更好的选择。那不正确?
  • 数据就是数据。用户界面就是用户界面。 UI 显示由 ViewModel 和 Model 公开和提供的数据,而不是相反。

标签: c# wpf xaml data-binding mvvm


【解决方案1】:

您能否简单地在您的 MyView 中创建一个反映到视图模型的属性?

public string Title 
{ 
    get { return ((MyViewModel) DataContext).Title; } 
    set { ((MyViewModel) DataContext).Title = value; }
}

然后写:

<Controls:MyView Title="MyTitle" />

如果要绑定标题,则必须使其成为依赖属性而不是常规属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多