Является ли передача DependencyProperty, которая обновляется до ViewModel хорошей практикой? - PullRequest
2 голосов
/ 05 августа 2010

У меня есть пользовательский элемент управления, и у него есть свойство зависимости.Этот пользовательский элемент управления довольно сложен, поэтому я решил создать для него модель представления, но пока не реализовал его.Я думаю о создании модели представления, имеющей некоторые свойства, которые связаны с пользовательским элементом управления.

Вот мой пример кода,

UserControl.xaml

<StackPanel>
 <TextBlock Text={Binding Age} />
 <TextBlock Text={Binding Name} />
</StackPanel>

UserControl.cs

public Person Person
{
    get { return (Person)GetValue(PersonProperty); }
    set { SetValue(PersonProperty, value); }
}
public static readonly DependencyProperty PersonProperty = DependencyProperty.Register("Person", typeof(Person), typeof(SampleUserControl), new PropertyMetadata(null, propertyChangedCallback));

private static void propertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
 // I want to update the view model here
 // Something like the following
 (this.DataContext as MyViewModel).Person = Person; 
}

MyViewModel

public Person Person
{
  get { return _person; }
  set
  {
    _pserson = person;
    RaisePorpertyChanged("Age");
    RaisePorpertyChanged("Name");
  }
}

public int Age{ get; set; }
public string Name{ get; set; }

Итак, вы думаете, что это хорошая практика?Я имею в виду обновление модели представления, когда обновляется свойство зависимости, и, надеюсь, кто-то учит меня, как обновить модель представления внутри PropertyChangedCallback :) Кстати, я использую инструментарий MVVM Light.

1 Ответ

0 голосов
/ 06 августа 2010

Согласно этому вопросу, http://forums.silverlight.net/forums/p/133665/298671.aspx, Я не могу использовать модель представления в качестве DataContext пользовательского элемента управления, чтобы связать некоторый пользовательский интерфейс обычным способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...