0

同様のことを行うための例がすでにたくさんあることは知っています。これらを読みましたが、実装が機能しない理由を理解できません。

ComboBoxA が値 X に設定されているときに、ComboBoxB を無効にしようとしています。この実装では、ComboBoxA で選択された値に関係なく、ComboBoxB は常に有効になります。

コンボボックスA:

<ComboBox  Name="ComboBoxA">
    <ComboBoxItem Name="X">X</ComboBoxItem>
    <ComboBoxItem Name="Y">Y</ComboBoxItem>
</ComboBox>

コンボボックス B:

<ComboBox Name="ComboBoxB">
    <ComboBoxItem Name="Something">Something</ComboBoxItem>
    <ComboBox.Style>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="IsEnabled" Value="True" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxA}" Value="X">
                    <Setter Property="IsEnabled" Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>
4

2 に答える 2

0

ComboboxA へのデータバインディングを実行したことがありません。

参照要素名「ComboboxA」であり、「ComboboxB」ではありません

あなたが持っている:

<DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxB}" Value="X">

これは次のようになります。

<DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxA}" Value="X">

.

<ComboBox Name="ComboBoxB">
    <ComboBoxItem Name="Something">Something</ComboBoxItem>
    <ComboBox.Style>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="IsEnabled" Value="True" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=SelectedItem,ElementName=ComboBoxA}" Value="X">
                    <Setter Property="IsEnabled" Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>
于 2015-03-31T01:55:23.420 に答える
0

これを行うには、コンバーターを使用できます。

public class SelectedItemToDisable : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {

         if (value != null)
         {
            var val = (value as ComboBoxItem).Content;
             if (val.ToString() == "X") //may be its not string, some object type 
                 return false;
         }
        return true;
    }

Xaml のリソース部分にコンバーターを定義します。

<local:SelectedItemToDisable x:Key="DisableConverter"/>

<ComboBox  Name="ComboBoxA">
 <ComboBoxItem Name="X">X</ComboBoxItem>
 <ComboBoxItem Name="Y">Y</ComboBoxItem>
</ComboBox>
<ComboBox Name="ComboBoxB" IsEnabled="{Binding Path=SelectedItem, ElementName=ComboBoxA, Converter={StaticResource DisableConverter}}">
 <ComboBoxItem Name="Something">Something</ComboBoxItem>
</ComboBox>

お役に立てれば。

于 2015-03-31T11:06:06.840 に答える