Veri WPF bir ağaç görünümü öğeye bağlama | Netgez.com
SORU
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ÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • A Alkhaldi

    A Alkhaldi

    12 Mayıs 2007
  • fast2hell

    fast2hell

    16 AÄžUSTOS 2006
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011