我有一个UserControl,需要在复选框的基础上与两个DataContext绑定。
此UserControl必须显示有关应用程序(全局)或选定DataGridRow的数据。
class Person
{
public string Name {get; set;}
public string Age {get; set;}
}
UserControl只有两个文本字段来显示名称和年龄。如果"全球"选中复选框,然后我想在MainViewModel中将此usercontrol与APerson
(Person类的)属性绑定,如果未选中,则必须将UserControl与SelectedItem
绑定在{{1} }}。 SelectedItem也是DataGrid
类型
答案 0 :(得分:0)
基本上你可以使用你的ViewModel来获得你想要的东西。这是一种方法。
您将在ViewModel中绑定Checkbox.IsChecked
到'IsGlobal'属性。
然后你将userControl绑定到另一个属性,比如ViewModel中的SomePerson
。
最后,在setter
的{{1}}中,您可以将IsGlobal
更改为数据网格中的SomePerson
或APerson
,具体取决于{{1}的布尔状态}。
答案 1 :(得分:0)
[在此处添加此内容,因为您想要一种纯粹在XAML中执行此操作的方法。我认为坚持纯XAML并不是必不可少的,@ bit的答案是正确的方法,IMO。]
您可以使用样式来设置执行更改的触发器。
我们假设您的UC被称为MyUC
,目前您在其他视图/ UC /窗口中有一个类似于<local:MyUC/>
的实例。您可以将实例更改为:
<local:MyUC>
<local:MyUC.Style>
<Style TargetType="{x:Type local:MyUC}">
<Setter Property="DataContext" Value="{Binding SelectedItem, ElementName=MyDataGrid}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=MyCheckbox, Path=IsChecked}"
Value="True">
<Setter Property="DataContext" Value="{Binding APerson}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</local:MyUC.Style>
</local:MyUC>
我在这里更改数据上下文属性,但您可以更改MyUC
上的任何其他依赖项属性。
同样,我认为这是解决此功能的不太受欢迎的方法,但它是纯XAML。