【发布时间】:2010-12-25 17:40:59
【问题描述】:
我的多选列表框中的 ListBoxItems 上有以下数据触发器
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource DisableWorkItemConverter}">
<Binding ElementName="MainForm" Path="PickedWorkItemID"/>
<Binding Path="Id"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="IsEnabled" Value="False"/>
<Setter Property="IsSelected" Value="False"/>
</DataTrigger>
IsEnabled 设置正常,但 IsSelected 未设置。我该如何解决?
我尝试取出 IsEnabled 以查看它是否与 IsSelected 冲突,但该项目在不应该被选中时仍保持选中状态。
重申一下,我可以告诉绑定和转换器工作正常,因为 IsEnabled 工作正常。但由于某种原因,IsSelected 不会取消设置。
编辑:我突然想到我可能不希望它像 IsEnabled 那样工作。因为当此触发器评估为 false 时,该项目将重新启用。我不希望仅仅因为此触发器不再为真而选择以前未选择的行。
有什么想法吗?基本上我不希望选择任何禁用的行。
编辑2:
我尝试添加一个普通触发器,希望它会链接数据触发器,但这也不起作用。
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource DisableWorkItemConverter}">
<Binding ElementName="MainForm" Path="PickedWorkItemID"/>
<Binding Path="Id"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="IsSelected" Value="False"></Setter>
</Trigger>
</Style.Triggers>
【问题讨论】:
-
在重现您的问题时,我发现如果我在触发器中设置 ListBoxItem IsSelected=True,那么我也可以在触发器中将其设置为 False。但是,一旦用户选择了该项目,触发器将不再更改 IsSelected。
-
嗯,这很有趣。对我来说找到删除选择的方法并不是一个好兆头。感谢您的调查。
标签: wpf data-binding binding datatrigger