Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XAML使用单选按钮启用和禁用带有数据绑定的文本框_C#_Xaml_Mvvm - Fatal编程技术网

C# XAML使用单选按钮启用和禁用带有数据绑定的文本框

C# XAML使用单选按钮启用和禁用带有数据绑定的文本框,c#,xaml,mvvm,C#,Xaml,Mvvm,我试图找出如何启用和禁用带有单选按钮和数据绑定的文本框。似乎我应该能够将textbox IsEnabled绑定到布尔值并修改该值,但我无法让它正常工作。我想有几套单选按钮和文本框,所以我想要一个通用的方法来处理这个问题。我尝试使用转换器,但因为我没有使用任何x:名称,所以我不确定这些名称在这种情况下是否有用。我可以让他们启用/禁用单选按钮,但这不是我想要做的。我的代码主要显示了我尝试的第一个文本框的解决方案 Xaml代码 <Grid> <StackPanel&g

我试图找出如何启用和禁用带有单选按钮和数据绑定的文本框。似乎我应该能够将textbox IsEnabled绑定到布尔值并修改该值,但我无法让它正常工作。我想有几套单选按钮和文本框,所以我想要一个通用的方法来处理这个问题。我尝试使用转换器,但因为我没有使用任何x:名称,所以我不确定这些名称在这种情况下是否有用。我可以让他们启用/禁用单选按钮,但这不是我想要做的。我的代码主要显示了我尝试的第一个文本框的解决方案

Xaml代码

    <Grid>
    <StackPanel>
        <RadioButton GroupName="grp1" Content="Enable TextBox"  IsEnabled="{Binding Bttn1, Mode=TwoWay}" IsChecked="{Binding Bttn1}" Checked="RadioButton_Checked" Unchecked="RadioButton_UnChecked" />
        <RadioButton GroupName="grp1" Content="Disable TextBox" IsEnabled="{Binding Bttn2}" />
        <TextBox IsEnabled="{Binding Txtbx1, Mode=TwoWay}" BindingGroup="{Binding grp1}" ></TextBox>

        <RadioButton GroupName="grp2" Content="Enable TextBox"  IsEnabled="{Binding Bttn3, Mode=TwoWay}" IsChecked="{Binding Bttn3}" Checked="RadioButton_Checked" Unchecked="RadioButton_UnChecked" />
        <RadioButton GroupName="grp2" Content="Disable TextBox" IsEnabled="{Binding Bttn4}" />
        <TextBox IsEnabled="{Binding Txtbx2, Mode=TwoWay}" BindingGroup="{Binding grp2}" ></TextBox>
    </StackPanel>
</Grid>
再往下走,我有

    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }


    private void RadioButton_Checked(object sender, RoutedEventArgs e)
    {
        Handle(sender as RadioButton);
    }

    private void RadioButton_UnChecked(object sender, RoutedEventArgs e)
    {
        Handle(sender as RadioButton);
    }


    void Handle(RadioButton radioButton)
    {
        bool flag = radioButton.IsChecked.Value;

        this.Title = "IsChecked = " + flag.ToString();

    }

    public class RadioConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return !(bool)parameter;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return !(bool)value ? parameter : null;
        }

    }

如果您想启用和禁用带有单选按钮的文本框,此解决方案可以:

 <Grid>
        <StackPanel>
            <RadioButton x:Name="RB1" GroupName="grp1" Content="Enable TextBox" />
            <RadioButton GroupName="grp1" Content="Disable TextBox"  />
            <TextBox IsEnabled="{Binding IsChecked, ElementName=RB1}" ></TextBox>

            <RadioButton x:Name="RB2" GroupName="grp2" Content="Enable TextBox"  />
            <RadioButton GroupName="grp2" Content="Disable TextBox"  />
            <TextBox IsEnabled="{Binding IsChecked, ElementName=RB2}"  ></TextBox>
        </StackPanel>


感谢您的回答,我希望有一种方法可以禁用文本框,而不使用x:Name,但将IsEnabled绑定到变量名,并在代码中设置true或false,这可能是不可能的。
 <Grid>
        <StackPanel>
            <RadioButton x:Name="RB1" GroupName="grp1" Content="Enable TextBox" />
            <RadioButton GroupName="grp1" Content="Disable TextBox"  />
            <TextBox IsEnabled="{Binding IsChecked, ElementName=RB1}" ></TextBox>

            <RadioButton x:Name="RB2" GroupName="grp2" Content="Enable TextBox"  />
            <RadioButton GroupName="grp2" Content="Disable TextBox"  />
            <TextBox IsEnabled="{Binding IsChecked, ElementName=RB2}"  ></TextBox>
        </StackPanel>