我已经使用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时,转换器将永远不再运行,因此没有选择任何对象。
感谢您的帮助!
答案 0 :(得分:0)
DataContext.DocumentToSelectInTree
属性将触发IsSelectedConverter
转换器的计算。
我希望您可能已经为ViewModel实现了INotifyPropertyChanged接口。
如果您还没有编写,请为TreeView编写ItemSelectedCommand,并在DocumentToSelectInTree
执行时触发ItemSelected
属性的PropertyChanged通知