Нет необходимости в скрытых полях (или любой другой концепции в 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а ViewModelOrder - это имя свойства в модели представления, которое необходимо заменить на локальное: MyUserControl на имя элемента управления / пространство имен.