Как определить, является ли элемент в таблице данных itemscontrol текущим? - PullRequest
1 голос
/ 13 апреля 2011

У меня есть ItemsControl, который привязывается к ICollectionView.

Мне нужно определить, используя DataTemplate элемента, является ли он текущим.

Примечание.Я хочу, чтобы ItemsControl выглядел.

1 Ответ

3 голосов
/ 13 апреля 2011

Я бы сделал это с помощью MultiValueConverter, который сравнивает элемент данных с шаблоном CurrentItem в представлении, например,

<local:EqualityComparisonConverter x:Key="EqualityComparisonConverter"/>
<DataTemplate DataType="{x:Type local:Employee}">
    <StackPanel Orientation="Horizontal">
        <CheckBox IsEnabled="False">
            <CheckBox.IsChecked>
                <MultiBinding Converter="{StaticResource EqualityComparisonConverter}" Mode="OneWay">
                    <Binding RelativeSource="{RelativeSource AncestorType=ItemsControl}"
                             Path="ItemsSource.CurrentItem"/>
                    <Binding />
                </MultiBinding>
            </CheckBox.IsChecked>
        </CheckBox>
        ...

Преобразователь:

public class EqualityComparisonConverter : IMultiValueConverter
{
    #region IMultiValueConverter Members

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values.Length < 2) throw new Exception("At least two inputs are needed for comparison");
        bool output = values.Aggregate(true, (acc, x) => acc && x.Equals(values[0]));
        return output;
    }

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

    #endregion
}

Убедитесь, что на самом делеизменить текущий элемент каким-либо образом, или это совершенно бессмысленно.Также ItemsSource из ItemsControl, очевидно, должен быть ICollectionView, но вы все равно сказали, что это так.

...