我在Multi-selection ListBox中的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>
答案 0 :(得分:1)
似乎一旦设置了“IsSelected”属性,无论是用户还是后面的代码,setter都将不再起作用。我不确定是否有任何方法,但至少有一个黑客可以在你的具体情况下工作。您可以在ListBoxItem上为“IsEnabledChanged”事件注册一个处理程序,然后检查数据条件并在数据库中调用它时在处理程序中设置IsSelected。
示例:
private void ListBoxItem_EnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
ListBoxItem senderItem = (ListBoxItem)sender;
if (YourDataCondition == true)
{
senderItem.IsSelected = false;
}
}
我能找到的唯一其他解决方案是向ListBoxItem添加一些依赖项属性,向其“OnPropertyChanged”事件注册一个类似的方法,并在DataTrigger中更改该属性。
以下是someone else's attempt to do this我尚未验证的内容。