在布尔条件下绑定DataContext

时间:2014-04-28 09:52:43

标签: c# wpf xaml binding

我有一个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类型

2 个答案:

答案 0 :(得分:0)

基本上你可以使用你的ViewModel来获得你想要的东西。这是一种方法。

您将在ViewModel中绑定Checkbox.IsChecked到'IsGlobal'属性。 然后你将userControl绑定到另一个属性,比如ViewModel中的SomePerson。 最后,在setter的{​​{1}}中,您可以将IsGlobal更改为数据网格中的SomePersonAPerson,具体取决于{{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。