首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wpfdatagrid无线电按钮选择和取消选择问题

wpfdatagrid无线电按钮选择和取消选择问题
EN

Stack Overflow用户
提问于 2015-08-19 07:26:20
回答 1查看 439关注 0票数 1

我得到了一个数据表,每行只有几列带有无线电按钮。实际上,我有两个问题:

  1. 每行我可以选择多个无线电按钮。不太好,我只能选一个。
  2. 当无线电按钮被选中时我不能取消选择。

我只有XAML代码:

代码语言:javascript
复制
<DataGrid AutoGenerateColumns="False" VerticalAlignment="Stretch"  Grid.Row="1" Name="dg1" ItemsSource="{Binding Source={StaticResource XmlData},XPath=Limits/*}">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="Capacité" CellTemplate="{StaticResource CustomCapacityTemplate}" />
                <DataGridTemplateColumn Header="Aucune" Width="60">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <RadioButton GroupName="{Binding XPath=ID}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="Légère" Width="60">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <RadioButton GroupName="{Binding XPath=ID}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="Modérée" Width="60">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <RadioButton GroupName="{Binding XPath=ID}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="Forte" Width="60">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <RadioButton GroupName="{Binding XPath=ID}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="Totale" Width="60">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <RadioButton GroupName="{Binding XPath=ID}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>

            <DataGrid.RowDetailsTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding XPath=explicationTitle}" FontWeight="Bold" Margin="10" />
                        <TextBlock Text="{Binding XPath=explicationDescription}" Margin="10" />
                        <TextBlock Text="Aucune" FontWeight="Bold" Margin="10" />
                        <TextBlock Text="{Binding XPath=explicationLimiteAucune}" Margin="10" />
                        <TextBlock Text="Modérée" FontWeight="Bold" Margin="10" />
                        <TextBlock Text="{Binding XPath=explicationLimiteModeree}" Margin="10" />
                        <TextBlock Text="Totale" FontWeight="Bold" Margin="10" />
                        <TextBlock Text="{Binding XPath=explicationLimiteTotale}" Margin="10" />
                    </StackPanel>
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>
        </DataGrid>
EN

回答 1

Stack Overflow用户

发布于 2015-08-19 09:21:30

假设属性为string CurrentOption

加上这个

代码语言:javascript
复制
<UserControl.Resources>
    <self:CurrentOptionConverter x:Key="CurrentOptionConverter" />
</UserControl.Resources>

更改为这样,对于问题1,通过ID解决这个问题应该是字符串。

代码语言:javascript
复制
<DataGrid AutoGenerateColumns="False" VerticalAlignment="Stretch"  Grid.Row="1" Name="dg1" ItemsSource="{Binding Source={StaticResource XmlData},XPath=Limits/*}">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Capacite" CellTemplate="{StaticResource CustomCapacityTemplate}" />
        <DataGridTemplateColumn Header="Clear" Width="60">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding XPath=ID}" 
                        IsChecked={Binding XPath=CurrentOption, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                        Converter={StaticResource CurrentOptionConverter}, ConverterParameter={x:Null}}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Aucune" Width="60">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding XPath=ID}" 
                        IsChecked={Binding XPath=CurrentOption, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                        Converter={StaticResource CurrentOptionConverter}, ConverterParameter=Aucune}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Legere" Width="60">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding XPath=ID}" 
                        IsChecked={Binding XPath=CurrentOption, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                        Converter={StaticResource CurrentOptionConverter}, ConverterParameter=Legere}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Moderee" Width="60">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding XPath=ID}" 
                        IsChecked={Binding XPath=CurrentOption, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                        Converter={StaticResource CurrentOptionConverter}, ConverterParameter=Moderee}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Forte" Width="60">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding XPath=ID}" 
                        IsChecked={Binding XPath=CurrentOption, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                        Converter={StaticResource CurrentOptionConverter}, ConverterParameter=Forte}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Totale" Width="60">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding XPath=ID}" 
                        IsChecked={Binding XPath=CurrentOption, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                        Converter={StaticResource CurrentOptionConverter}, ConverterParameter=Totale}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>

CurrentOptionConverter.cs

代码语言:javascript
复制
public class CurrentOptionConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null && parameter != null)
        {
            return value.Equals(parameter);
        }
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if ((bool)value)
        {
            return parameter;
        }
        return Binding.DoNothing;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32089043

复制
相关文章

相似问题

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