在布尔条件下绑定DataContext
本文关键字:DataContext 绑定 条件下 布尔 | 更新日期: 2023-09-27 18:00:34
我有一个UserControl,它需要在复选框的基础上与两个DataContext绑定。
此UserControl必须显示有关应用程序(全局)或所选DataGridRow的数据。
class Person
{
public string Name {get; set;}
public string Age {get; set;}
}
UserControl只有两个文本字段来显示name和Age。如果选中"Global"复选框,则我希望将此用户控件与MainViewModel中的APerson
(Person类的)属性绑定;如果未选中,则我必须将usercontrol与DataGrid
中的SelectedItem
绑定。SelectedItem也是Person
类型的
基本上,您可以使用ViewModel来获得您想要的内容。这里有一种方法。
您将把Checkbox.IsChecked
绑定到ViewModel中的"IsGlobal"属性。然后将userControl绑定到另一个属性,比如ViewModel中的SomePerson
。最后,在IsGlobal
的setter
中,您可以根据IsGlobal
的布尔状态将数据网格中的SomePerson
更改为APerson
或SelectedItem
。
[在这里添加这个,因为你想要一种纯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。