如果我設置使用如何在Style,Setter和HierarchicalDataTemplate上爲子屬性設置DataContext綁定?
public partial class MainWindow : Window
{
readonly TreeViewViewModel TreeView;
public MainWindow()
{
//...
this.DataContext = TreeView;
}
}
那麼下面的XAML Window的DataContext的正常工作
<TreeView x:Name="radTreeView" Grid.Row="1"
Margin = "5,5,5,5"
ItemsSource = "{Binding FirstGeneration}"
Padding = "5"
ScrollViewer.HorizontalScrollBarVisibility = "Visible"
ScrollViewer.VerticalScrollBarVisibility = "Visible"
IsTextSearchEnabled="True" >
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem" >
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" >
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" />
<TextBlock VerticalAlignment="Center" Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
不過,我需要在DataContext是一個視圖模型的屬性,以便TreeViewViewModel TreeView
是一個屬性的MainViewModel mainViewModel
和DataContext的代碼隱藏中設置爲
public partial class MainWindow : Window
{
private MainViewModel mainViewModel;
public MainWindow()
{
//...
this.DataContext = this;
}
}
我可以綁定W的部分使用DataContext = "{Binding MainViewModel.TreeView}"
,但這隻適用於主TreeView元素,而不適用於沒有DataContext屬性的Style,Setter,HierarchicalDataTemplate。
如何正確設置所有XAML TreeView元素的數據上下文?
下面是我到目前爲止已經試過,但只有ItemsSource = "{Binding FirstGeneration}"
正在與正確的數據上下文
<TreeView x:Name="radTreeView" Grid.Row="1"
Margin = "5,5,5,5"
DataContext = "{Binding MainViewModel.TreeView}"
ItemsSource = "{Binding FirstGeneration}"
Padding = "5"
ScrollViewer.HorizontalScrollBarVisibility = "Visible"
ScrollViewer.VerticalScrollBarVisibility = "Visible"
IsTextSearchEnabled="True" >
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem" >
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}" >
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" />
<TextBlock VerticalAlignment="Center" Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
我的代碼實際上工作正常(doh!) - 爲了簡化寫這個問題,我從CheckBox和TextBox中移除了DataContext,現在在代碼中工作正常。 dkozl的回答幫助解決了這個問題。 – pathDongle