DataTrigger的Setter是否可以修改DataContext中的属性?

时间:2016-02-04 15:49:13

标签: c# wpf checkbox datacontext datatrigger

我有一个复选框,我计划实施一个'全选'功能。

我认为最简单的实现是使用DataTrigger修改我的DataTemplate,将IsChecked属性更改为true / false。

<UserControl.Resources>
    <DataTemplate x:Key="MyTemplate">
        <Grid>
            <CheckBox x:Name="Selection" IsChecked="{Binding Selected}" />
        </Grid>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding ElementName=SelectAll, Path=IsChecked}" Value="true">
                  <Setter TargetName="Selection" Property="DataContext.Selected" Value="true" />
            </DataTrigger>
           <DataTrigger Binding="{Binding ElementName=SelectAll, Path=IsChecked}" Value="false">
                   <Setter TargetName="Selection" Property="IsChecked" Value="false" />
           </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>
</UserControl.Resources>

<Grid>
  <CheckBox Name="SelectAll />
  <ListView Name="lvSteps"  ItemTemplate="{StaticResource MyTemplate}" ItemsSource="{Binding MyList}" />
</Grid>

但是,这会覆盖CheckBox的绑定,CheckBox设置为DataContext属性&#39; Selected&#39;只是在DataTrigger中设置的bool值。

考虑到它是完全合理的。

所以我的问题是,我可以通过Setter在DataTrigger中更改DataContext属性的值吗?

所以我可以将我的CheckBox绑定到&#39; Selected&#39;,并更改&#39; Selected&#39; DataTrigger的Setter中的值?

1 个答案:

答案 0 :(得分:1)

你可能会以错误的方式思考它。

<ControlTemplate TargetType="TabItem"> <Grid Name="Panel" Height="30"> <Border Name="Border" Background="{TemplateBinding Background}" ... 是你的容器元素(比如说ListVM)的一部分,实习生持有你的对象(ListItemVM),其中包含SelectAll所以如果你检查Selected你可以而且应该迭代你的元素并将SelectAll设置为true,这些项目在那里使用INotifyPropertyChanged通知你的CheckBox

修改评论

没有必要将Selected的事件与它绑定并在Set-Part中做你的事情

SelectAll

另外你为什么要在xaml中这样做?

因为你可以使用接口并以一种你可以在没有代码冗余的情况下使用它的方式将其分解出来,你也可以在代码中从那里访问&#34; ListVM& #34;