gpt4 book ai didi

wpf - 使用触发器在 XAML 中选择所有复选框?

转载 作者:行者123 更新时间:2023-12-02 00:45:25 24 4
gpt4 key购买 nike

我想在 xaml 中实现一个全选复选框。
我在 ListView 中有几个(模板化的)复选框。然后我在 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 属性已绑定(bind)到我的 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”中找不到静态成员“IsCheckedProperty”。

现在听起来好像 Target/SourceName 绑定(bind)不起作用,但为什么呢?有什么我想念的吗?

最佳答案

我认为您毕竟应该将 Check All 逻辑放在 ViewModel 中。在 this Code Project article ,WPF Guro Josh Smith 在 ViewModel 中解决了类似的问题(在他的例子中是 TreeView 而不是 ListView),标题如下:“Putting the Smarts in a ViewModel "
我认为在 ViewModel 中实现和调试这个逻辑比做一些复杂的 MultiBinding 更容易,你不知道它会在哪里咬你。
最后一点——我总是听从 Josh 的建议 :-)

关于wpf - 使用触发器在 XAML 中选择所有复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/862047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com