2016-11-23 65 views
0

在WPF中我使用了一个MultiBinding这看起来是这样的:供应的绑定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> 

这是一个稍微哈克方法,虽然,因为我需要A传递到MyConverter我不想更新它(NotifyPropertyChanged)以触发DataTrigger/MyConverter,因为它是不必要的(我仍然需要B来触发更新)。

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

+1

你尝试过'OneTime'模式吗? '' – ASh

+0

如果将A作为转换器参数(因此使用常规转换器进行常规绑定)会怎么样? – Evk

+0

@Evk好主意,但不幸的是'ConverterParameter'不支持绑定。 – maxp

回答

1

您可以创建一个转换器的依赖属性值答:

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

相关问题