Выделите Combobox, когда SelectedValue отсутствует в ItemsSource - PullRequest
0 голосов
/ 18 октября 2018

У меня есть окно со многими списками.Эти комбинированные списки выглядят так: есть стиль:

<ComboBox Style="{StaticResource ComboBoxFlat}" 
              ItemsSource="{Binding Source={x:Static binding:BindingCollections.Names}}" 
              SelectedValuePath="Key"
              DisplayMemberPath="Value"
              SelectedValue="{Binding NameID}"/>

ItemsSource - список значений ключей, отображаются значения.Пока все это работает.

Теперь может случиться, что свойство, связываемое с SelectedValue, содержит ключ, которого нет в ItemsSource.Если это происходит, Combobox должен быть помечен каким-либо образом, например, Combobox должен иметь красную рамку.

Каков наилучший способ сделать это?Можно ли определить такое поведение в стиле Combobox?

1 Ответ

0 голосов
/ 18 октября 2018

Вы можете связать со свойством SelectedIndex свойства ComboBox и NameID источника и реализовать IMultiValueConverter, который возвращает true, если свойство SelectedIndex возвращает -1, тогда как NameIDсвойство возвращает значение, например:

class MultiConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return (int)values[0] == -1 && values[1] != null;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

XAML:

<ComboBox ... 
          SelectedValue="{Binding NameID}">
    <ComboBox.Resources>
        <local:MultiConverter x:Key="MultiConverter" />
    </ComboBox.Resources>
    <ComboBox.Style>
        <Style TargetType="ComboBox" BasedOn="{StaticResource ComboBoxFlat}">
            <Style.Triggers>
                <DataTrigger Value="True">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource MultiConverter}">
                            <Binding Path="SelectedIndex" RelativeSource="{RelativeSource Self}" />
                            <Binding Path="NameID" />
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="BorderBrush" Value="Red" />
                    <Setter Property="BorderThickness" Value="10" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>
...