В моем проекте Silverlight я создаю простую двустороннюю привязку в коде:
Это свойство, к которому я хочу привязать:
public class Selection : ViewModelBase {
private string selectedModel;
public string SelectedModel {
get { return selectedModel; }
set {
selectedModel = value;
FirePropertyChanged("SelectedModel");
}
}
}
Моей целью привязки является текстовое свойство поля форматированного текста.
Мой код привязки следующий:
Selection s = getSelectionObject();
Binding modelBinding = new Binding("SelectedModel");
modelBinding.Source = s.SelectedModel;
selectorContent.usc_ModelSelector.SetBinding(GSelector.TextProperty, modelBinding);
Это прекрасно работает! Каждый раз, когда свойство SelectedModel объекта Selection изменяется, текстовое поле получает соответствующее уведомление и обновляется. Но он связан только в одну сторону, а мне нужен двусторонний. Итак, я попытался изменить режим привязки, изменив приведенный выше код:
Binding modelBinding = new Binding("SelectedModel");
modelBinding.Path = new PropertyPath(s.SelectedModel);
modelBinding.Source = s.SelectedModel;
modelBinding.Mode = BindingMode.TwoWay;
selectorContent.usc_ModelSelector.SetBinding(GSelector.TextProperty, modelBinding);
Но это не работает. Он компилируется, но вся привязка теперь кажется безрезультатной. Мало того, что я не могу инициировать изменение ViewModel (в классе Selection в свойстве SelectedModel - что должно быть эффектом, когда двусторонняя привязка будет работать правильно) при изменении текста RichTextBox, я даже не могу см. работу с односторонней привязкой, которая работала с приведенным выше кодом!
Кажется, что линия
modelBinding.Path = new PropertyPath(s.SelectedModel);
является источником проблемы, потому что, когда я устанавливаю s.SelectedModel в качестве свойства Path привязки, свойство Path объекта modelBinding, кажется, имеет правильное значение (которое показало взгляд внутри объекта во время запуска во время отладки - это строковое значение ), но я не вижу никаких изменений в расширенном текстовом поле.
Восстановление кода до версии с односторонней привязкой немедленно приводит к тому, что поле форматированного текста снова работает должным образом.
Кто-нибудь может помочь? Я уже потратил на это несколько часов, и мне действительно нужно успеть к сроку клиента. Так что любая помощь будет очень признательна :) Заранее большое спасибо ...
new Binding("SelectedModel")
должно быть эквивалентноnew Binding() { Path = new PropertyPath("SelectedModel") }
16.01.2012Selection
. Вы говорите, что односторонняя привязка работала просто отлично, единственное, что вам нужно сделать, это установить режим привязки наTwoWay
, так как сама привязка явно работает. 16.01.2012