来自
MSDN:
在Windows Presentation Foundation (WPF)中,PriorityBinding通过指定一系列绑定来工作。这些绑定按照从高到低的优先级顺序排列。如果处理最高优先级绑定时成功返回值,则无需处理列表中的其他绑定。可能情况是,最高优先级绑定需要很长时间才能被评估,在此期间成功返回值的下一个优先级绑定将被使用,直到更高优先级的绑定成功返回值。
例如,代码如下:
<StackPanel>
<ToggleButton IsChecked="{Binding ShowTooltip, Mode=TwoWay}" >toggle</ToggleButton>
<TextBlock>
<TextBlock.ToolTip>
<PriorityBinding>
<Binding Path="ToolTipSometimes" Mode="OneWay"/>
<Binding Path="Name" Mode="OneWay"/>
</PriorityBinding>
</TextBlock.ToolTip>
</TextBlock>
</StackPanel>
如果 A 绑定成功返回一个值,则满足以下条件:
绑定源的路径成功解析。
如果有,值转换器能够转换结果值。
生成的值对于目标属性是有效的。
使用 MultiBinding 可以像这样完成:
<TextBlock >
<TextBlock.ToolTip>
<MultiBinding>
<MultiBinding.Converter>
<local:NullCleanup/>
</MultiBinding.Converter>
<Binding Path="ToolTip" Mode="OneWay"/>
<Binding Path="Text" Mode="OneWay" />
</MultiBinding>
</TextBlock.ToolTip>
</TextBlock>
使用这个作为转换器
public class NullCleanup : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return values.Aggregate((r, o) => r ?? o);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然而,您可以将逻辑放在虚拟机中。
private string _Tooltip;
public string Tooltip;
{
get { return _Tooltip; }
set { SetProperty(ref _Tooltip, value,()=>RaisePropertyChanged(nameof(ToolTipCleaned))); }
}
public string ToolTipCleaned => Tooltip ?? Name;