第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

WPF樹視圖中的SelectedItem數(shù)據(jù)綁定

WPF樹視圖中的SelectedItem數(shù)據(jù)綁定

慕碼人8056858 2019-07-03 15:38:55
WPF樹視圖中的SelectedItem數(shù)據(jù)綁定如何檢索在WPF-TreeView中選擇的項(xiàng)?我想在XAML中這樣做,因?yàn)槲蚁虢壎ㄋ?。你可能會認(rèn)為SelectedItem但很明顯不存在是只讀的,因此是不可用的。這就是我想做的:<TreeView ItemsSource="{Binding Path=Model.Clusters}"              ItemTemplate="{StaticResource ClusterTemplate}"             SelectedItem="{Binding Path=Model.SelectedCluster}" />我想綁定SelectedItem我的模型上的一個(gè)屬性。但這給了我一個(gè)錯(cuò)誤:“SelectedItem”屬性是只讀的,不能從標(biāo)記中設(shè)置。編輯:好吧,這就是我解決這個(gè)問題的方法:<TreeView           ItemsSource="{Binding Path=Model.Clusters}"            ItemTemplate="{StaticResource HoofdCLusterTemplate}"           SelectedItemChanged="TreeView_OnSelectedItemChanged" />在我的XAML的代碼文件中:private void TreeView_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e){     Model.SelectedCluster = (Cluster)e.NewValue;}
查看完整描述

3 回答

?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊

我知道這個(gè)答案已經(jīng)被接受了,但是我把它放在一起來解決這個(gè)問題。它使用了與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>

希望它能幫助別人!


查看完整回答
反對 回復(fù) 2019-07-03
?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

我找到了解決辦法。它移動(dòng)混亂,以便MVVM工作。

首先添加以下類:

public class ExtendedTreeView : TreeView{
    public ExtendedTreeView()
        : base()
    {
        this.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(___ICH);
    }

    void ___ICH(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        if (SelectedItem != null)
        {
            SetValue(SelectedItem_Property, SelectedItem);
        }
    }

    public object SelectedItem_
    {
        get { return (object)GetValue(SelectedItem_Property); }
        set { SetValue(SelectedItem_Property, value); }
    }
    public static readonly DependencyProperty SelectedItem_Property = DependencyProperty.Register("SelectedItem_", typeof(object), 
    typeof(ExtendedTreeView), new UIPropertyMetadata(null));}

并將其添加到您的XAML中:

 <local:ExtendedTreeView ItemsSource="{Binding Items}" SelectedItem_="{Binding Item, Mode=TwoWay}">
 ..... </local:ExtendedTreeView>


查看完整回答
反對 回復(fù) 2019-07-03
  • 3 回答
  • 0 關(guān)注
  • 2679 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號