WPF Использование привязок к ViewModel в стиле, используемом для изменения элементов управления - PullRequest
0 голосов
/ 08 ноября 2018

Цель состоит в том, чтобы поменять элемент управления во время выполнения на основе свойства в моей ViewModel, и у отображаемого элемента управления должна быть привязка, которая обновляет свойства в ViewModel. Я начал с создания следующего стиля в View.xaml:

<UserControl.Resources>
    <Style x:Key="DisplayTextOrButton" TargetType="{x:Type ContentControl}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding TextNotButton}" Value="True">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <TextBox Content="{Binding SomeText}"/>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding TextNotButton}" Value="False">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <Button Content="{Binding ButtonText}"/>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

Обратите внимание, что привязки LabelText и ButtonText являются привязками к свойствам в ViewModel.

Далее в View.xaml у меня есть следующее:

<ContentControl Content="{Binding TextNotButton}"
                Style="{StaticResource DisplayTextOrButton}">

</ContentControl>

Наконец, ViewModel.cs имеет следующие свойства:

private bool textNotButton;
public bool TextNotButton
{
  get => this.textNotButton;
  set
  {
    this.textNoButton = value;
    this.OnPropertyChanged("TextNotButton");
  }
}

private string someText;
public string SomeText
{
  get => this.someText;
  set
  {
    this.someText = value;
    this.OnPropertyChanged("SomeText");
  }
}

private string buttonText;
public string ButtonText
{
  get => this.buttonText;
  set
  {
    this.buttonText = value;
    this.OnPropertyChanged("ButtonText");
  }
}

Стиль хорошо работает для переключения между меткой и кнопкой, но изменение текста в TextBox не обновляет свойство в ViewModel, а текст кнопки является пустым (я думаю, что привязка не сработала)

Я считаю, что это потому, что стиль является статическим ресурсом, поэтому привязки SomeText и ButtonText в стиле на самом деле не являются привязками в ViewModel, но я не уверен, как передать ссылку на другие свойства в стиле. Или даже если это вещь. Я довольно новичок в XAML, поэтому не уверен, как справиться с этим

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