在不触发更新的情况下提供绑定到多重绑定

时间:2016-11-23 09:10:54

标签: c# wpf xaml

在WPF中,我使用MultiBinding看起来像这样:

<DataTrigger Value="True">
    <DataTrigger.Binding >
        <MultiBinding Converter="{StaticResource MyConverter}">
            <Binding Path="A" />
            <Binding Path="B"  />
        </MultiBinding>
    </DataTrigger.Binding>
    <Setter Property="BorderBrush" Value="Red" />
</DataTrigger>

虽然这是一个有点hacky的方法,因为我需要将A传递到MyConverter ,但我不想更新它(NotifyPropertyChanged)触发DataTrigger / MyConverter,因为它是不必要的(我仍然需要B来触发更新)。

是否有任何解决方案或完全不同的方法?

1 个答案:

答案 0 :(得分:1)

您可以创建一个具有值A的依赖项属性的转换器:

public class MyConverter : DependencyObject, IValueConverter
{
    private static readonly DependencyProperty ValueAProperty =
        DependencyProperty.Register("ValueA", typeof(object), typeof(MyConverter));

    public object ValueA
    {
        get { return GetValue(ValueAProperty); }
        set { SetValue(ValueAProperty, value); }
    }

    public object Convert(
        object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value.Equals(ValueA); // or whatever
    }

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

并像这样使用它:

<DataTrigger Value="True">
    <DataTrigger.Binding >
        <Binding Path="B">
            <Binding.Converter>
                <local:MyConverter ValueA="{Binding A}"/>
            </Binding.Converter>
        </Binding>
    </DataTrigger.Binding>
    <Setter Property="BorderBrush" Value="Red" />
</DataTrigger>

依赖项属性的类型当然可能与object不同。