数据绑定到WPF Treeview中的SelectedItem
如何检索WPF树视图中选择的项目?我想在XAML中这样做,因为我想绑定它。
您可能会认为它 不存在SelectedItem
,但显然 不存在 ,它是只读的,因此无法使用。
这就是我想做的:
<TreeView ItemsSource="{Binding Path=Model.Clusters}" ItemTemplate="{StaticResource ClusterTemplate}"
SelectedItem="{Binding Path=Model.SelectedCluster}" />
我想将绑定SelectedItem
到模型上的属性。
但这给了我错误:
“ SelectedItem”属性是只读的,无法通过标记设置。
好的,这就是我解决这个问题的方法:
<TreeView ItemsSource="{Binding Path=Model.Clusters}"
ItemTemplate="{StaticResource HoofdCLusterTemplate}"
SelectedItemChanged="TreeView_OnSelectedItemChanged" />
在我的xaml的codebehindfile中:
private void TreeView_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e){
Model.SelectedCluster = (Cluster)e.NewValue;
}
回答:
我意识到这个问题已经被接受,但是我将其汇总起来以解决问题。它使用了与Delta解决方案类似的想法,但无需将TreeView子类化:
public class BindableSelectedItemBehavior : Behavior<TreeView>{
#region SelectedItem Property
public object SelectedItem
{
get { return (object)GetValue(SelectedItemProperty); }
set { SetValue(SelectedItemProperty, value); }
}
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register("SelectedItem", typeof(object), typeof(BindableSelectedItemBehavior), new UIPropertyMetadata(null, OnSelectedItemChanged));
private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var item = e.NewValue as TreeViewItem;
if (item != null)
{
item.SetValue(TreeViewItem.IsSelectedProperty, true);
}
}
#endregion
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.SelectedItemChanged += OnTreeViewSelectedItemChanged;
}
protected override void OnDetaching()
{
base.OnDetaching();
if (this.AssociatedObject != null)
{
this.AssociatedObject.SelectedItemChanged -= OnTreeViewSelectedItemChanged;
}
}
private void OnTreeViewSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
this.SelectedItem = e.NewValue;
}
}
然后,您可以在XAML中将其用作:
<TreeView> <e:Interaction.Behaviors>
<behaviours:BindableSelectedItemBehavior SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
</e:Interaction.Behaviors>
</TreeView>
希望它将对某人有所帮助!
以上是 数据绑定到WPF Treeview中的SelectedItem 的全部内容, 来源链接: utcz.com/qa/432642.html