在布尔条件下绑定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类型的

在布尔条件下绑定DataContext

基本上,您可以使用ViewModel来获得您想要的内容。这里有一种方法。

您将把Checkbox.IsChecked绑定到ViewModel中的"IsGlobal"属性。然后将userControl绑定到另一个属性,比如ViewModel中的SomePerson。最后,在IsGlobalsetter中,您可以根据IsGlobal的布尔状态将数据网格中的SomePerson更改为APersonSelectedItem

[在这里添加这个,因为你想要一种纯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。