Согласно msdn , должно быть совершенно законно и возможно связать что-либо с вложенным свойством:
<Binding Path="propertyName.propertyName2" .../>
<Binding Path="propertyName.propertyName2.propertyName3" .../>
В моем случае это не так, хотя ...
У меня есть пользовательский элемент управления MyControl
со свойством зависимости ViewModel
:
public static DependencyProperty ViewModelProperty = DependencyProperty.Register(
"ViewModel", typeof(IViewModel), typeof(MyControl));
public IViewModel ViewModel
{
get { return (IViewModel)GetValue(ViewModelProperty); }
set { SetValue(ViewModelProperty, value); }
}
, и в шаблоне элемента управления я пытаюсь привязать свойства в этой модели представления:
<Style TargetType="{x:Type my:MyControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type my:MyControl}">
<Grid>
<TextBox Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=ViewModel.Text}"/>
<Button x:Name="MyButton" Content="Visible by trigger" Visibility="Collapsed" />
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=ViewModel.ButtonVisible}" Value="True">
<Setter TargetName="MyButton" Property="Visibility" Value="Visible" />
</DataTrigger>
.../>
В самой модели представления у меня есть текст preoperty следующим образом:
public string Text
{
get { return m_text; }
set
{
m_text = value;
OnPropertyChanged("Text");
}
}
public bool ButtonVisible
{
get { return m_buttonVisible; }
set
{
m_buttonVisible = value;
OnPropertyChanged("ButtonVisible"); }
}
Я не получаю ошибок связывания, но ничего не происходит ...
Есть какие-нибудь подсказки?
Редактировать Похоже, что привязки работают наполовину.Когда текст изменяется в окне редактирования, устанавливается мое свойство Text, но если свойство Text установлено в коде, пользовательский интерфейс не будет обновляться.
Редактировать 2
Похоже, моя первая попытка упростить кейс до публикации была немного успешной ... Как указывает @Erno, опубликованный мною код работаетХОРОШО.
Я еще немного посмотрел на исходный код и добавил триггер к сценарию.Оригинальный код использует триггеры для отображения частей пользовательского интерфейса при заданных условиях.Они также привязаны к вложенным свойствам.Теперь я думаю, что эти триггеры не срабатывают.Я обновил код.Если это все еще не показывает, что не так, я могу опубликовать пример приложения где.