Skip to main content
 首页 » 编程设计

c#之根据 RadioButton 更改绑定(bind)

2024年08月06日25jiqing9006

我有一个文本框,它绑定(bind)到一个带有三元组的 ObservableCollection,我想根据两个单选按钮更改绑定(bind):

XAML:

<ItemsControl ItemsSource="{Binding DataInformation, Mode=OneWay}"> 
    <ItemsControl.ItemTemplate> 
        <DataTemplate> 
                <TextBox x:Name="xTextbox" Grid.Row="0" 
                        IsReadOnly="True" 
                        Text="{Binding Path=Item2 , Mode=OneWay}" /> 
        </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl  > 
 
<RadioButton Grid.Row="1" 
        x:Name="PatoRadioButton"  
        Width="150" 
        Content="Type Pato" 
        Checked="PatoRadioButtonChecked" /> 
 
<RadioButton Grid.Row="2" 
        x:Name="FifoRadioButton"  
        Width="150" 
        Content="Type Fifo" 
        Checked="FifoRadioButtonChecked" /> 

View 模型:

private ObservableCollection<Tuple<int, string, string>> dataInformation; 
 
public ObservableCollection<Tuple<int, string, string>> DataInformation 
{ 
    get 
    { 
        return DataInformation; 
    } 
 
    set 
    { 
        dataInformation = value; 
        NotifyPropertyChanged("DataInformation"); 
    } 
} 

问题:

如何根据选中的 RadioButton 更改 TextBoxText="{Binding Path=Item2 , Mode=OneWay}" >?

  • 然后检查 PatoRadioButton:Text="{Binding Path=Item2 , Mode=OneWay}"
  • 然后选中 FifoRadioButton:Text="{Binding Path=Item3 , Mode=OneWay}"

请您参考如下方法:

您可以向 DataTemplateTextBox 添加 2 个 Triggers:

<DataTemplate> 
    <TextBox x:Name="xTextbox" Grid.Row="0" IsReadOnly="True"> 
        <TextBox.Style> 
            <Style TargetType="TextBox"> 
                <Style.Triggers> 
                    <DataTrigger Binding="{Binding IsChecked,  
                                 ElementName=PatoRadioButton}" Value="True"> 
                        <DataTrigger.Setters> 
                            <Setter Property="Text" Value="{Binding Path=Item2,  
                                    Mode=OneWay" /> 
                        </DataTrigger.Setters> 
                    </DataTrigger> 
 
                    <DataTrigger Binding="{Binding IsChecked,  
                                 ElementName=FifoRadioButton}" Value="True"> 
                        <DataTrigger.Setters> 
                            <Setter Property="Text" Value="{Binding Path=Item3,  
                                    Mode=OneWay}" /> 
                        </DataTrigger.Setters> 
                    </DataTrigger> 
                </Style.Triggers> 
            </Style> 
        </TextBox.Style> 
    </TextBox> 
</DataTemplate> 

IsChecked 属性更改时,触发器将设置 TextBlockBinding