Veri WPF bir ağaç görünümü öğeye bağlama
Nasıl WPF-ağaç görünümü Seçili öğeyi alabilir miyim? Bu büyüyü yapmak için istiyorum çünkü XAML bunu yapmak istiyorum.
SelectedItem
ama görünüşe göre öyle olduğunu düşünebilirsinizyoksalt okunur ve bu nedenle kullanılamaz.
Bu yapmak istediÄŸim ÅŸey:
<TreeView ItemsSource="{Binding Path=Model.Clusters}"
ItemTemplate="{StaticResource ClusterTemplate}"
SelectedItem="{Binding Path=Model.SelectedCluster}" />
Benim Model bağlama özelliği SelectedItem
istiyorum.
Ama bu bana hata veriyor:
'Selectedıtem' özelliği salt okunur ve hiçbir şekilde biçimlendirme. itibaren
Düzenleme: Tamam, bu çözdüm bu şekilde
<TreeView
ItemsSource="{Binding Path=Model.Clusters}"
ItemTemplate="{StaticResource HoofdCLusterTemplate}"
SelectedItemChanged="TreeView_OnSelectedItemChanged" />
ve benim xaml ve codebehindfile
private void TreeView_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
Model.SelectedCluster = (Cluster)e.NewValue;
}
CEVAP
Bu cevabı kabul oldu farkındayım, ama bu arada sorunu çözmek için koydum. Ağaç sınıfı için gerek kalmadan Delta çözümü için, ama benzer bir fikir kullanır:
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;
}
}
Daha sonra XAML bu kullanabilirsiniz:
<TreeView>
<e:Interaction.Behaviors>
<behaviours:BindableSelectedItemBehavior SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
</e:Interaction.Behaviors>
</TreeView>
Umarım birileri yardımcı olacaktır!
Android: bir liste Görünümü içinde bir...
WPF Veri bağlama: Nasıl "üst"...
Nasıl DOM JavaScript Veri Bağlama Uygu...
Veri baÄŸlama olmadan iÅŸlemek deÄŸer...
Açısal ile bir Ağaç Görünümü yapmak mü...