WPF使用用于更改控件的样式的ViewModel绑定

时间:2018-11-08 16:24:58

标签: c# wpf xaml

目标是在运行时基于我的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>

请注意,绑定LabelTextButtonText是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中的属性,并且Button的文本为空(我想是因为绑定无效)< / p>

我认为这是因为样式是静态资源,因此样式中的绑定SomeTextButtonText实际上不是ViewModel中的绑定,但是我不确定如何传递将其他属性引用到样式中。甚至就是那件事。我对XAML还是很陌生,所以不确定如何处理

0 个答案:

没有答案