1

複数選択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>
4

1 に答える 1

1

ユーザーまたはコード ビハインドで「IsSelected」プロパティが設定されると、セッターは機能しなくなります。それを回避する方法があるかどうかはわかりませんが、少なくとも特定のケースで機能するハックがあります。ListBoxItem で「IsEnabledChanged」イベントのハンドラーを登録してから、データの状態を確認し、データが呼び出している場合はハンドラーで IsSelected を設定できます。

例:

private void ListBoxItem_EnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    ListBoxItem senderItem = (ListBoxItem)sender;
    if (YourDataCondition == true)
    {
        senderItem.IsSelected = false;
    }
}

私が見つけた他の唯一の解決策は、いくつかの依存関係プロパティを ListBoxItem に追加し、同様のメソッドをその "OnPropertyChanged" イベントに登録し、DataTrigger でそのプロパティを変更することです。

これは、私がまだ確認できていない他の誰かの試みです。

于 2009-12-11T18:13:17.830 に答える