在ViewModel中的其他View中设置属性

Tom*_*tom 1 c# wpf xaml user-controls mvvm

我有一个带有a Window和a 的WPF应用程序UserControl.它UserControl是用MVVM-Pattern实现的.所以在视图中我有一个在ViewModel中Label显示string名为InfoMessage 的-property 的值.

Window我加入这个实例UserControl通过

<views:ItemInfoView Grid.Row="3" Grid.Column="1" x:Name="itemInfoView"/>
Run Code Online (Sandbox Code Playgroud)

现在我想从我的XAML设置InfoMessage Window.目前我不知道如何在xaml中实现这一点.在代码隐藏中,我可以访问DataContext我的控件并将其转换为ItemInfoViewModel并设置值如:

((ItemInfoViewModel)itemInfoView.DataContext).InfoMessage = "Hello World";
Run Code Online (Sandbox Code Playgroud)

但我希望在纯XAML中有一种方法可以做到这一点.有谁知道这是否可能以及如何?

Len*_*art 5

您需要向用户控件添加依赖项属性:

// Your property
public string InfoMessage{get;set;}

// Register Dependency Property
public static readonly DependencyProperty InfoMessageProperty =
DependencyProperty.Register("InfoMessage", typeof(string), typeof(ItemInfoView),
        new UIPropertyMetadata(true));
Run Code Online (Sandbox Code Playgroud)

然后你应该能够直接设置或绑定InfoMessage:

<views:ItemInfoView Grid.Row="3" Grid.Column="1" InfoMessage="Whatever"/>
Run Code Online (Sandbox Code Playgroud)