Что касается ваших подозрений:
1) Я думаю, что поведение привязки по умолчанию для TextBox
равно TwoWay
, с триггером обновления LostFocus
, что означает, что ваш фокус пользовательского интерфейса должен будет изменитьсядругому элементу управления до обновления привязки, если в пользовательский интерфейс внесены изменения.
Если в код внесены изменения, вам нужно вызвать событие NotifyPropertyChanged
, чтобы система привязки увидела его.
2) Вероятно, это не тот случай, но у вас создается впечатление, что вы пытаетесь установить привязки для ваших свойств UserControl
, а это не тот способ, которым привязка данных была разработана для использования в этом конкретном случае.вид варианта использования.Вам нужно привязать данные из не-UI классов к свойствам зависимостей на UserControl
s.
3) Это никогда не будет иметь значения, пока ваш проект пользовательского интерфейса имеет ссылкуна ваши уроки.
4) Это обычная реакция людей, когда они начинают использовать XAML и WPF.Это похоже на то, что вместо того, чтобы вручить коробку с Legos, вы просто получили машину для литья под давлением с недостаточными инструкциями, не так ли?
В целом, это ситуация, когда вам может понадобиться проверить ваш дизайн;элементы шаблона «Model-View-ViewModel» пригодятся.Если вы не знакомы с этим, это шаблон разработки, в котором вы вводите класс «ViewModel», возможно, вы можете назвать его MasterPartsVM
, который содержит реализацию INotifyPropertyChanged.
DataContext
вашего UserControl
будет установлен в этот MasterPartsVM
класс.
Пример краткого кода с использованием некоторых общих имен.Учитывая класс ViewModel с небольшим классом поддержки, который выглядит следующим образом:
class PartViewModel : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
public PartClass Data { get; set; }
public String SomeVMProperty
{
get { return Data.SomeProperty; }
set
{
if (Data.SomeProperty != value)
Data.SomeProperty = value;
this.PropertyChanged(this, new PropertyChangedEventArgs("SomeVMProperty"));
}
}
}
class PartClass
{
public string SomeProperty { get; set; }
}
XAML базового UserControl будет выглядеть так:
<UserControl x:Class="WpfApplication1.PartUserControl"
... >
<Grid>
<TextBox Text="{Binding SomeVMProperty}" Margin="68,77,104,176" />
</Grid>
</UserControl>
Чтобы подключить ваш класс данных к этомуUserControl, вы устанавливаете свойство DataContext UserControl.Если вы делаете это в коде, это вопрос наличия ссылки на ваш пользовательский элемент управления и ViewModel, а затем установки свойства:
MyUserControlInstance.DataContext = new PartViewModel(); // or some existing PartViewModel
Эта комбинация кода должна работать, чтобы создать текстовое поле с Text
свойство изменяется каждый раз, когда изменяется свойство SomeVMProperty
.