簡體   English   中英

WPF綁定來自兩個控件的數據

[英]WPF Binding data from two controls

我試圖將自定義屬性從一個控件綁定到另一個控件,這里代碼:

首先,我的自定義TreeViewControl

public partial class ItemTreeControl : UserControl
{
    readonly ItemTreeViewModel itemTreeViewModel;

    public static readonly DependencyProperty SelectedItemProperty = 
        DependencyProperty.Register("SelectedItem",
                                    typeof(Item), 
                                    typeof(ItemTreeControl),
                                    new PropertyMetadata(default(Item)));

    public Item SelectedItem
    {
        get { return (Item)GetValue(SelectedItemProperty); }
        set { SetValue(SelectedItemProperty, value); }
    }
}

這是另一個用於顯示詳細信息的自定義控件:

public partial class ItemDetailControl : UserControl
{
    public static readonly DependencyProperty DetailItemProperty = 
            DependencyProperty.Register("DetailItem",
                                         typeof(Item),
                                         typeof(ItemDetailControl),
                                         new PropertyMetadata(default(Item)));

    public Item DetailItem
    {
        get { return (Item)GetValue(DetailItemProperty); }
        set { SetValue(DetailItemProperty, value); }
    }
}

現在具有綁定的XAML代碼:

<StackPanel>
    <ItemTreeControl x:Name="itemTreeControl"/>
    <ItemDetailControl DetailItem="{Binding ElementName=itemTreeControl,
                                      Path=SelectedItem, Mode=TwoWay}"/>
</StackPanel>

現在,如果有新值到達ItemTreeControl.SelectedItem ,則ItemTreeControl.SelectedItem中的值ItemDetailControl.DetailItem更改。 為什么?

更新。

ItemTreeControl隱藏代碼:

private void myTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
    if (e.NewValue is ItemViewModel)
    {
         SelectedItem = (e.NewValue as ItemViewModel).Item;
    }
    else
    {
        SelectedItem = null;
    }
}

通常,UI控件不會綁定到彼此的屬性。 SelectedItem非常適合保存在ViewModel級別。 如果您有一個虛擬機作為這些控件的基礎,則應該將這兩個控件都綁定到一個虛擬機級屬性。

還要注意,Detail控件通常不會更改SelectedItem,因此綁定不應為TwoWay

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM