C# 如何在XAML中设置属性的属性?
我有一个用户控件作为我的视图(名为C# 如何在XAML中设置属性的属性?,c#,wpf,xaml,data-binding,mvvm,C#,Wpf,Xaml,Data Binding,Mvvm,我有一个用户控件作为我的视图(名为MyView),它的数据上下文设置为我的视图模型的实例(类型为MyViewModel)。 我在视图的代码中有一个只读属性(即MVVM Light代码段),如下所示: public MyViewModel Vm { get { return (MyViewModel) DataContext; } } MyViewModel有一个名为Title的字符串类型属性,我想通过XAML对其进行更改,因为MyView被用作列表框的ItemTemplate <
MyView
),它的数据上下文设置为我的视图模型的实例(类型为MyViewModel
)。我在视图的代码中有一个只读属性(即MVVM Light代码段),如下所示:
public MyViewModel Vm
{
get { return (MyViewModel) DataContext; }
}
MyViewModel
有一个名为Title
的字符串类型属性,我想通过XAML对其进行更改,因为MyView
被用作列表框的ItemTemplate
<ListBox ItemsSource="{Binding MyViewModelCollection}">
<ListBox.ItemTemplate>
<DataTemplate>
<Controls:MyView /> <!-- How do I set Vm.Title property here? -->
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我该怎么做?
或者有更好的方法吗?您能否在MyView
中创建一个反映视图模型的属性
public string Title
{
get { return ((MyViewModel) DataContext).Title; }
set { ((MyViewModel) DataContext).Title = value; }
}
然后写:
<Controls:MyView Title="MyTitle" />
如果要绑定标题,必须使其成为依赖项属性而不是常规属性。您的方法是反向的。如果您已经有一个VM集合,为什么不在该集合的项中操作这样的属性?@HighCore是否愿意进一步解释?我不完全明白。你的列表框项目来自哪里?MyViewModel
的集合,对吗那么,为什么您坚持要更改视图中的数据,而不是视图模型本身中的数据?你似乎误解了这个问题的一些核心概念MVVM@HighCore哦我以前也试过,但效果不太好,所以一些答案让我觉得这是一个更好的选择。这不对吗?数据就是数据。UI就是UI。UI显示由ViewModel和Model公开和提供的数据,而不是相反。