我刚刚从MVP Windows Forms的世界进入MVVM WPF世界,我正在尝试开发一个分析程序。
XAML:
<TreeView VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<TreeView.Resources>
<DataTemplate DataType="{x:Type local:ProfileViewModel}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</TreeView.Resources>
<TreeViewItem ItemsSource="{Binding Profiles}"
Header="Profiles"/>
<TreeViewItem ItemsSource="{Binding Jobs}"
Header="Jobs"/>
</TreeView>
ProfileViewModel:
private Profile profile;
public string Name { get { return profile.Name; } }
private bool isSelected;
public bool IsSelected
{
get
{
return this.isSelected;
}
set
{
this.isSelected = value;
OnPropertyChanged("IsSelected");
}
}
public ProfileViewModel(Profile profile)
{
this.profile = profile;
}
基本上,我要做的是在选择TextBlock时将ProfileViewModel中的IsSelected属性设置为true,否则设置为false。我知道有可能提出这样的事件:
<TextBlock Text="{Binding Name}" PreviewMouseUp="MouseUpHandler/>
但我更喜欢它是否会直接自动更新ViewModel。有可能这样做吗?
答案 0 :(得分:0)
您可以将TreeViewItem.IsSelected绑定到项目中的属性。
像这样:
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding Path=IsMarked}"/>
</Style>
每个TreeViewItem都会尝试绑定到其相应项目的名为IsMarked的属性。
尝试一下:)
答案 1 :(得分:0)
假设您的意思是在文本框聚焦时选择:
<TreeView VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<TreeView.Resources>
<DataTemplate DataType="{x:Type local:ProfileViewModel}">
<TextBlock Text="{Binding Name}"
IsKeyboardFocusWithin="{Binding IsSelected,
Mode=OneWayToSource}">
</DataTemplate>
</TreeView.Resources>
<TreeViewItem ItemsSource="{Binding Profiles}"
Header="Profiles"/>
<TreeViewItem ItemsSource="{Binding Jobs}"
Header="Jobs"/>
</TreeView>
答案 2 :(得分:0)
试试这个:
<TreeView ItemsSource="{Binding YourItemCollection}" ... >
<TreeView.Resources>
<DataTemplate DataType="{x:Type local:ProfileViewModel}">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</TreeView.Resources>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
这是您使用@devhedgehog提供的Style
的方法。任何集合控件的ItemContainerStyle
始终是每个项目的“容器”的Style
,在本例中为TreeViewItem
。