[英]How do I Encapsulate a WPF ViewModel/View UserControl as a Control
[英]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.