问候,
我正在使用带有Model-View-ViewModel模式的WPF,我有一个IsSelected
属性的视图模型,我希望将其绑定到TreeViewItem
的{{1}}范围内所有IsSelected
的属性。我正在尝试使用TreeViewItem
和Style
执行此操作。这显然适用于根级Setter
,但不适用于他们的孩子。为什么是这样?如何才能将其应用于所有TreeViewItem
控件?
以下是XAML的观点:
TreeViewItem
答案 0 :(得分:3)
我认为我们需要更多信息才能回答您的问题。具体来说,您的视图模型是什么样的。下面是一个可以复制和粘贴的例子。
<强> Window1.xaml 强>:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Background" Value="{Binding Background}"/>
</Style>
<HierarchicalDataTemplate x:Key="ItemTemplate" DataType="local:DataItem" ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</Window.Resources>
<TreeView ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemTemplate}"/>
</Window>
<强> Window1.xaml.cs 强>:
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Media;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
var dis = new ObservableCollection<DataItem>();
var di = new DataItem() { Name = "Top", Background = Brushes.Red };
di.Children.Add(new DataItem() { Name = "Second", Background = Brushes.Blue });
dis.Add(di);
DataContext = dis;
}
}
public class DataItem
{
public DataItem()
{
Children = new ObservableCollection<DataItem>();
}
public string Name
{
get;
set;
}
public ICollection<DataItem> Children
{
get;
set;
}
public Brush Background
{
get;
set;
}
}
}
答案 1 :(得分:0)
使用视图模型,您将对ItemContainerStyle属性非常友好。您在代码中执行的操作设置了根级别的数据模板。您想要做的是为树视图中的每个项目设置样式,您可以这样做。
<TreeView ItemsSource="{Binding TopLevelAreas}"
ItemContainerStyle="{StaticResource AreaTemplate}">
</TreeView>
享受
答案 2 :(得分:0)
你必须如下所述使用。使用BasedOn选项
<TreeView ItemsSource="{Binding TopLevelAreas}">
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}" BasedOn="{StaticResource StyleKey}"/>
</TreeView.Resources>
</TreeView>