数据绑定到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

回到顶部