首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定到RadioButton GroupName的WPF

绑定到RadioButton GroupName的WPF
EN

Stack Overflow用户
提问于 2017-07-19 05:07:39
回答 2查看 3.1K关注 0票数 1

我有一个使用DataTemplate的动态ListView,如下所示:

代码语言:javascript
复制
<ListView.ItemTemplate>
<DataTemplate>
    <Border BorderThickness="0,0,0,1" BorderBrush="#ccc">
        <RadioButton GroupName="MyRadioButtonGroup">
            <StackPanel Orientation="Horizontal" Margin="0,0,0,5" Width="{Binding ActualWidth, ElementName=CheckoutGrid}">
                <TextBlock Text="{Binding Path=Test1, StringFormat='{}{0} - '}" />
                <TextBlock Text="{Binding Path=Test2, StringFormat='{} test {0} - '}" />
                <TextBlock Text="{Binding Path=Test, StringFormat='{} test {0}'}" />
            </StackPanel>
        </RadioButton>
    </Border>
</DataTemplate>
</ListView.ItemTemplate>

我想要禁用一个按钮,直到某个RadioButton IsChecked

代码语言:javascript
复制
<RadioButton Padding="15,10" VerticalAlignment="Center">
<RadioButton.Style>
    <Style TargetType="RadioButton" BasedOn="{StaticResource styleToggleButton4}">
        <Setter Property="Visibility" Value="Collapsed" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=MyRadioButtonGroup, Path=IsChecked}" Value="False">
                    <Setter Property="IsEnabled" Value="False" />
                </DataTrigger>
            </Style.Triggers>
    </Style>
</RadioButton.Style>
<TextBlock FontWeight="SemiBold" FontSize="14" Margin="0">NEXT</TextBlock>
</RadioButton>

所以问题是我不知道如何正确地绑定到RadioButton GroupName="MyRadioButtonGroup"。您将在上面的DataTrigger中看到我正在尝试Binding="{Binding ElementName=MyRadioButtonGroup, Path=IsChecked}" Value="False",但这对我不起作用,因为它显然是一个GroupName而不是x:Name

对于如何正确地处理这个问题,有什么建议吗?如果可能的话,我更愿意在前端处理这个问题。

EN

回答 2

Stack Overflow用户

发布于 2017-07-19 06:06:28

您可以将单选按钮绑定到命令,然后使用isChecked作为参数。然后在此基础上绑定到布尔值。不过,我认为这可能只是一种变通方法。

代码语言:javascript
复制
<RadioButton
        Command="{Binding MyCommand}"
        CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}"
        GroupName="radio" />
<RadioButton
        Command="{Binding MyCommand}"
        CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}"
        GroupName="radio" />

然后,在代码隐藏或VM中,需要实现ICommand接口和INotifyPropertyChanged

代码语言:javascript
复制
    public bool IsChecked
    {
        get { return isChecked;}
        set
        {
            isChecked = value;
            OnPropertyChanged();
        }
    }

    private void OnMyCommand(object obj)
    {
        if(obj is bool)
        {
            IsChecked = (bool)obj;
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2017-07-19 18:16:03

组没有可以绑定到的IsChecked属性。

如果您没有一个源属性来跟踪是否至少有一个选中的RadioButton,并且“希望在前端处理它”--我猜这是指在视图中--您可以编写一些代码,根据是否选择了一个RadioButton,将ListViewTag属性设置为true/false。这是一行代码:

代码语言:javascript
复制
private void ListView_Checked(object sender, RoutedEventArgs e) => lv.Tag = true;

代码语言:javascript
复制
<ListView x:Name="lv" ToggleButton.Checked="ListView_Checked">
    <ListView.ItemTemplate>
        ...
    <ListView.ItemTemplate>
</ListView>

<RadioButton Padding="15,10" VerticalAlignment="Center">
    <RadioButton.Style>
        <Style TargetType="RadioButton" BasedOn="{StaticResource styleToggleButton4}">
            <Setter Property="Visibility" Value="Collapsed" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=lv, Path=Tag}" Value="True">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </RadioButton.Style>
    <TextBlock FontWeight="SemiBold" FontSize="14" Margin="0">NEXT</TextBlock>
</RadioButton>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45177092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档