<!--树节点展开属性由多个因素决定,故而采用多重绑定 --> <Setter Property="IsExpanded"> <Setter.Value> <MultiBinding Converter="{StaticResource EnableConverter}" UpdateSourceTrigger="PropertyChanged"> <!--指定绑定的ItemSource,而非默认的treeView ItemSource --> <Binding RelativeSource="{RelativeSource AncestorType=Window}" Path="DataContext.Criteria"/> <Binding Path="SubNodes"/> </MultiBinding> </Setter.Value> </Setter>
<TextBlock Grid.Row="5" Grid.Column="3"> <TextBlock.IsEnabled> <MultiBinding Converter="{StaticResource MultiStringStateConverter}"> <Binding Path="ZfMuscle"/> <Binding Path="ZfResult"/> </MultiBinding> </TextBlock.IsEnabled> </TextBlock>
// 继承IMultiValueConverter接口 public class EnableConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { var node = (Node)values[0];// 对应第一个绑定 var index = (int)values[1];// 对应第二个绑定 // do something } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }