Правильно, на самом деле я уже разобрался с этой проблемой, и для блага других я постараюсь записать, как я сделал все возможное, без моего кода передо мной.
Хорошо, сначалаИз всех моих пользовательских элементов управления я не правильно использовал свойства зависимости (ха-ха).Итак, давайте сначала исправим это.
public partial class CustomControl : UserControl
{
public DependencyProperty FieldValueProperty { get; set; }
public CustomControlViewModel Context = new CustomControlViewModel();
public int FieldValue
{
get { return (int) GetValue(FieldValueProperty); }
set
{
SetValue(FieldValueProperty,value);
}
}
public CustomControl()
{
this.DataContext = Context;
FieldValueProperty = DependencyProperty.Register("FieldValue", typeof (int), typeof (CustomControl),
new PropertyMetadata(FieldValueChanged));
InitializeComponent();
}
void FieldValueChanged(Object sender, DependencyPropertyChangedEventArgs e)
{
Context.FieldValue = (int)e.NewValue;
}
}
public class CustomControlViewModel : BaseClass
{
private int _fieldValue;
public int FieldValue
{
get { return _fieldValue; }
set
{
_fieldValue = value;
RaisePropertyChanged("FieldValue");
}
}
}
Довольно много изменений, лучший способ подумать об этом - взглянуть на публичную часть FieldValue, которая является частью CustomControl, которая использует GetValue и SetValue так же просто, как методы для вашего свойства зависимости, когда вы используете SetValueон использует свойство зависимостей, когда значение изменяет свойство зависимостей, вызывает метод FieldValueChanged, который вы указали для вызова в метаданных DependencyProperty.Register.Этот метод, который обрабатывает изменяемое FieldValue, затем устанавливает FieldValue в CustomControlViewModel; набор для этого public int устанавливает закрытое значение, к которому мы обращаемся, чтобы возвращать fieldvalue, но, как вы заметили, также вызывает метод RaisePropertyChanged ("FieldValue").Теперь этот метод унаследован от моего BaseClass, который реализует этот метод, он в основном реализует вещи INotifyPropertyChanged.Так что теперь, когда мое значение меняется, в основном, событие выдвигается, и теперь все, что мне нужно сделать, это обработать это событие в моем представлении, которое содержит этот элемент управления.Этот бит является простым битом в конструкторе
CustomControlInstance.Context.PropertyChanged += FieldValueChanged(Object Sender, PropertyChangedEventArgs e);
Затем метод для этого просто
void FieldValueChanged(Object Sender, PropertyChangedEventsArgs e)
{
this.FieldValue = (int)e.NewValue;
}
, который затем обновляет мое FieldValue представления с FieldValue из элемента управления, то естьв ней есть некоторые дыры, но это лучшее, что я могу вспомнить / объяснить вам, надеюсь, это поможет людям, я, конечно, теперь гораздо лучше понимаю свойства зависимости:)
Я приму этот ответ как принятый ответ, когдаЗавтра я снова за компьютером