我使用WPF與模型 - 視圖 - 視圖模型模式綁定,我有與IsSelected
屬性視圖模型,我想綁定到一個TreeViewItem
的範圍內的所有TreeViewItem
的財產IsSelected
。我試圖用Style
和Setter
來做到這一點。這顯然適用於根級TreeViewItem
s,但不適合他們的孩子。爲什麼是這樣?我怎麼能適用於所有TreeViewItem
控件?
下面是這個視圖XAML:
<UserControl x:Class="MyApp.AllAreasView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:MyApp="clr-namespace:MyApp"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="700">
<UserControl.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected"
Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
<MyApp:CountVisibilityConverter x:Key="CountVisibilityConverter" />
<HierarchicalDataTemplate x:Key="AreaTemplate"
DataType="AreaViewModel"
ItemsSource="{Binding Path=SubareasCollectionView}">
<WrapPanel>
<TextBlock Text="{Binding Path=Name}" Margin="0 0 8 0" />
<TextBlock DataContext="{Binding Path=Subareas}"
Text="{Binding Path=Count, StringFormat= (\{0\})}"
Visibility="{Binding Path=Count, Converter={StaticResource CountVisibilityConverter}}" />
</WrapPanel>
</HierarchicalDataTemplate>
</UserControl.Resources>
<TreeView ItemsSource="{Binding TopLevelAreas}"
ItemTemplate="{StaticResource AreaTemplate}">
</TreeView>
</UserControl>
感謝您的工作示例(並推斷簡單視圖模型)。事實證明,我已經生成了兩組獨立的視圖模型,並且我的視圖模型中的PropertyChanged事件沒有正確處理,因爲我已經掛鉤了一個,而WPF則是另一個。跟蹤事件並檢查PropertyChanged委託的GetInvocationList()的結果,讓我找到它。既然你證明它有效,我會接受這個答案。 – codekaizen 2009-11-22 08:23:32