WPF 绑定 - 选中 X 时绑定到 A,否则绑定到 B

本文关键字:绑定 选中 WPF | 更新日期: 2023-09-27 17:56:05

>基本上我有一个显示麦克风增益的文本块。

<TextBlock FontFamily="Calibri Light" FontSize="20" Foreground="#FFF65B60" FontWeight="Bold" Height="35"><Run Text="{Binding AudioRecorder.Gain, StringFormat={}Microphone Gain: {0:#} %}"/></TextBlock>

如您所见,这绑定到"AudioRecorder.Gain",但是如果未选中此复选框,我只想绑定到该值。

<CheckBox IsChecked="{Binding Recognizer.AutoGainControl}"

如果选中,我想绑定到

"识别器.增益"

这样的事情是可能的,还是我必须将两个增益变量合并在一起?

WPF 绑定 - 选中 X 时绑定到 A,否则绑定到 B

我不确定你是否成功了,但对于可能搜索同样事物的其他人来说,应该保留一些例子:

我已经收集了一些信息并创建了一个版本:

<Window x:Class="ComboItems.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:windows="clr-namespace:System.Windows;assembly=PresentationCore"
    xmlns:system="clr-namespace:System;assembly=mscorlib"
    Title="MainWindow" Width="525">
<Window.Resources>
    <x:Array x:Key="data1" Type="{x:Type system:String}">
        <system:String>Item1</system:String>
        <system:String>Item2</system:String>
        <system:String>Item3</system:String>
    </x:Array>
    <ObjectDataProvider x:Key="visibilityValues" 
                            ObjectType="{x:Type system:Enum}"
                            MethodName="GetValues">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="windows:Visibility" />
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window.Resources>
<Grid>
      <StackPanel>
        <RadioButton Content="RadioButton1" Name="Radio1" GroupName="radio"  />
        <RadioButton Content="RadioButton2" Name="Radio2"   GroupName="radio"  />
        <ListBox Name="listbox">
            <ListBox.Style>
                <Style TargetType="ListBox">
                    <Setter Property="ItemsSource">
                        <Setter.Value>
                            <Binding Source="{StaticResource data1}" />
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=IsChecked, ElementName=Radio1}" Value="True" >
                            <Setter Property="ItemsSource">
                                <Setter.Value>
                                    <Binding Source="{StaticResource data1}" />
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=IsChecked, ElementName=Radio2}" Value="True" >
                            <Setter Property="ItemsSource">
                                <Setter.Value>
                                    <Binding Source="{StaticResource visibilityValues}" />
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ListBox.Style>
        </ListBox>
    </StackPanel>
  </Grid>
</Window>

DataTrigger将在这里完成这项工作,并根据两个RadioButtonIsChecked属性,它将更改ListBox的来源。

此外,我在System.Enum类型的 GetValues 方法的帮助下使用了枚举的绑定,该方法接受 Type参数,以便它知道应返回哪个枚举的值。

上面的示例应该无需任何修改即可工作。