代码之家  ›  专栏  ›  技术社区  ›  Torsten

是否使用触发器选中XAML中的所有复选框?

  •  3
  • Torsten  · 技术社区  · 16 年前


    我在列表视图中有几个(模板化的)复选框。然后,我在listview之外有一个复选框,我希望有一个“全选”行为。 我可以在我的ViewModel中轻松地解决这个问题,但是,我认为在xaml中这样做会更优雅,因为“全选”复选框(直接)与我的ViewModel没有任何关系。 代码如下所示:

    <ListView>
        <ListView.ItemTemplate>
            <DataTemplate>
            <CheckBox Content="Globale Eingabe"
                Name="SelectSingle"
                IsChecked="{Binding IsChecked}">
            </CheckBox>
        </DataTemplate>
    <ListView.ItemTemplate>  
    </ListView>
    <CheckBox Name="SelectAll" />
    

    如您所见,SelectSingle的IsChecked属性已绑定到my ViewModel。所以我想我需要一个触发器来操纵复选框的状态。

    现在我已经试过这样的东西了:

    <CheckBox Content="Globale Eingabe"
        Name="SelectSingle"
        IsChecked="{Binding IsChecked}">
        <CheckBox.Triggers>
            <Trigger SourceName="SelectAll" Property="IsChecked" Value="True">
                <Setter TargetName="SelectSingle"  Property="IsChecked" Value="True"/>
            </Trigger>
        </CheckBox.Triggers>
    </CheckBox>
    

    <CheckBox Content="Globale Eingabe"
        Name="SelectSingle"
        IsChecked="{Binding IsChecked}">
        <CheckBox.Triggers>
            <DataTrigger Binding="{Binding ElementName=SelectAll, Path=IsChecked}" 
                Value="True">
                <Setter TargetName="Check"
                    Property="IsChecked"
                    Value="True"/>
            </DataTrigger>
        </CheckBox.Triggers>
    </CheckBox>
    

    我也尝试过同样的风格,但没有结果。我总是得到一个错误,在类型“ContentPresenter”中找不到与“static member”IsCheckedProperty类似的内容。

    有什么我遗漏的吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Amittai Shapira    13 年前

    我认为您应该在ViewModel中加入checkall逻辑。在里面 this Code Project article ,WPF大师Josh Smith解决了类似的问题(在他的案例中,它是 TreeView ListView )在具有以下标题的ViewModel中: .
    我认为在ViewModel中实现和调试这种逻辑比执行一些复杂的操作更容易 MultiBinding
    最后一点——我总是听从乔希的建议:——)

        2
  •  0
  •   newfurniturey    12 年前

    托尔斯滕,如果我不明白你已经尝试了什么,我很抱歉,但是你需要绑定 IsChecked 属性中的复选框的属性 ListView 检查 CheckBox 在it外部使用:

    IsChecked="{Binding Path=IsChecked, Mode=OneWay,ElementName=OutsideCheckBox}"