簡體   English   中英

在WPF ViewModel和UserControl之間共享非控制相關數據

[英]Sharing non control related data between WPF ViewModel and UserControl

我是WPF和MVVM模式的新手,所以請牢記這一點。

我負責的項目有一個視圖和一個視圖模型。 該視圖還包含一個沒有視圖模型的用戶控件。 有數據(自定義對象... Order)被傳遞給視圖模型,我還需要與用戶控件共享。

看起來UserControl確實通過DependencyPropertys在視圖模型之間共享數據,但是這個數據只是用戶控件上的文本框,看起來被綁定到視圖模型上的propertys。

我需要共享不會由用戶控件上的控件表示的數據。 是否有傳遞此數據的好方法(復雜的Order對象)? 也許我確實需要對我的用戶控件進行某種隱藏控制來實現這一目標,但我不確定是否對此不熟悉。 任何意見,將不勝感激。

不需要隱藏字段(或WPF中的任何此類概念),因為您可以向用戶控件添加所需的任何自定義屬性。

在用戶控件中,創建一個像這樣的新依賴屬性,但MyUserControl設置得恰當:

    public Order CurrentOrder
    {
        get { return (Order)GetValue(CurrentOrderProperty); }
        set { SetValue(CurrentOrderProperty, value); }
    }

    // Using a DependencyProperty as the backing store for CurrentOrder.  This enables binding, etc.
    public static readonly DependencyProperty CurrentOrderProperty =
        DependencyProperty.Register("CurrentOrder", typeof(Order), typeof(MyUserControl), new PropertyMetadata(null, OnCurrentOrderPropertyChanged));

    public static void OnCurrentOrderPropertyChanged(DependencyObject Sender, DependencyPropertyChangedEventArgs e)
    {
        var sender = Sender as MyUserControl;
        var NewValue = e.NewValue as Order;
        var OldValue = e.OldValue as Order;
        if (OldValue != null && sender != null)
        {
            //Use old value as needed and use sender instead of this as method is static.
        }
        if (NewValue != null && sender != null)
        {
            //Use new value as needed and use sender instead of this as method is static.
        }
    }

在您使用usercontrol的父視圖中,您可以編寫如下內容:

<local:MyUserControl CurrentOrder="{Binding ViewModelOrder}" />

其中CurrentOrder是usercontrol的dependancy屬性,ViewModelOrder是視圖模型中屬性的名稱,您需要將local:MyUserControl替換為您的控件名稱/名稱空間。

您可以在UserControl的類中創建依賴項屬性,並在使用該控件的View中綁定它。 無需在內部將依賴項屬性綁定到UserControl中的某個控件。

暫無
暫無

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

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