16 HAZİRAN 2009, Salı
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
25 ŞUBAT 2011, Cuma
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!
Bunu Paylaş:
Android: bir liste Görünümü içinde bir...
Nasıl kırık WPF Veri bağlama algılamak...
Ağaç görünümü seçin Yanındaki görüntül...
Nasıl veri bağlama ile WPF bir Köprü m...
Görüntü UriSource ve Veri Bağlama...