WPF Treeview IsSelected绑定

时间:2014-03-19 08:31:55

标签: wpf treeview

我已经使用HierarchicalDataTemplate设置了TreeView。 我想通过Binding设置TreeViewItem的IsSelected属性,所以在我的ViewModel中我有一个Property " ObjectToSelectInTreeView"它掌握着这个对象。

在TreeView中,我有一个带有多重绑定的样式

<Style TargetType="TreeViewItem">
  <Setter Property="IsSelected">
    <Setter.Value>
      <MultiBinding Converter="{StaticResource IsSelectedConverter}" Mode="OneWay">
        <Binding ElementName="TreeViewControl" Path="DataContext.DocumentToSelectInTree"
          UpdateSourceTrigger="PropertyChanged"></Binding>
        <Binding Path="."></Binding>
      </MultiBinding>
    </Setter.Value>
  </Setter>
  <Setter Property="Foreground" Value="Black"/>
  <Style.Triggers>
    <DataTrigger Binding="{Binding IsDeleted}" Value="True">
      <Setter Property="Foreground" Value="LightGray"/>
    </DataTrigger>
  </Style.Triggers>
</Style>

转换器:

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
 {
   ModelBase itemForComparison;
   if (values[0] != null)
   {
     if (values[1] is ObservableDocument)
       itemForComparison = ((ObservableDocument)values[1]).Document;
     else
       itemForComparison = (ModelBase)values[1];

     if (values[0] == itemForComparison)
       return true;
   }
 return false;
}

第一次全部工作。 但是当我手动选择TreeView中的所有项目然后设置ObjectToSelectInTreeView时,转换器将永远不再运行,因此没有选择任何对象。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

更改

DataContext.DocumentToSelectInTree属性将触发IsSelectedConverter转换器的计算。

我希望您可能已经为ViewModel实现了INotifyPropertyChanged接口。 如果您还没有编写,请为TreeView编写ItemSelectedCommand,并在DocumentToSelectInTree执行时触发ItemSelected属性的PropertyChanged通知