如何判断itemscontrol datatemplate中的项是否是最新的?

时间:2011-04-13 15:04:34

标签: wpf itemscontrol currentitem

我有一个绑定到ICollectionView的ItemsControl。

我需要告诉DataTemplate一个项目是否是当前的。

注意:这可以从Listbox中获得,但我希望ItemsControl看起来。

1 个答案:

答案 0 :(得分:3)

我会使用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的{​​{1}}显然需要是ICollectionView,但无论如何你都说过。

相关问题