0

私はデータグリッドを持っており、各行には1列に一連のラジオボタンがあります。リストボックス データ テンプレートを使用してこれらのラジオ ボタンをバインドし、オンザフライでラジオボタンを生成しました。

テンプレートのコードは次のとおりです。

<data:DataGrid   x:Name="formTemplate" AutoGenerateColumns="False" GridLinesVisibility="All" HeadersVisibility="All"  ItemsSource="{Binding Path=FormFieldInformation,Mode=TwoWay}"  >
  <data:DataGrid.Columns>
       <data:DataGridTemplateColumn DisplayIndex="1">
              <data:DataGridTemplateColumn.CellTemplate>
                 <DataTemplate>
                      <StackPanel>
                          <RadioButton GroupName="GN1" Content="From" Width="50" 
                                HorizontalAlignment="Left" VerticalAlignment="Center"/>
                       </StackPanel>
                  </DataTemplate>
               </data:DataGridTemplateColumn.CellTemplate>
       </data:DataGridTemplateColumn>
   <data:DataGrid.Columns>
 </data:DataGrid>

しかし、ここには 2 つの問題があります。1. データグリッド全体に対して生成されたすべてのラジオ ボタンの中から 1 つのラジオ ボタンしか選択できません。行ごとに1つのラジオボタンを選択したい。2. ViewModel で選択したラジオボタンの値を取得するにはどうすればよいですか?

事前に提案をお待ちしております。

ありがとう。

4

1 に答える 1

1

(私の悪い英語でごめんなさい)

GroupName1)各RadioButtonセットに固有のものを与える必要があります。私が考える最も簡単な方法はGroupName、データグリッドをバインドしているクラスのプロパティにをバインドすることです。たとえば、次のクラスがあるとします。

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Radio1IsChecked { get; set; }
    public bool Radio2IsChecked { get; set; }
}

「Id」が一意である場合、GroupName各行が異なる行を持つようにバインドします。

RadioButton IsChecked2)チェックされた値を取得するには、をクラスのプロパティにバインドする必要があります。上記のクラスでは、次のようになります。

<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <RadioButton GroupName="{Binding Id}" Content="From" IsChecked="{Binding Radio1IsChecked,Mode=TwoWay}"/>
        <RadioButton GroupName="{Binding Id}" Content="To" IsChecked="{Binding Radio2IsChecked,Mode=TwoWay}"/>
    </StackPanel>
</DataTemplate>

編集1

投稿したXAMLコードは、実行している実際のコードではないと思いますよね?あなたのこれを試してみてくださいCellTemplate

<DataTemplate>
<StackPanel>
    <TextBlock Text="{Binding Name}"/>
    <ItemsControl ItemsSource="{Binding Radios}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <RadioButton GroupName="{Binding GroupName}" Content="{Binding Name}" IsChecked="{Binding IsChecked,Mode=TwoWay}"/>
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

これで、クラスは次のようになる必要があります。

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Radio> Radios { get; set; }
}


public class Radio
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsChecked { get; set; }
    public string GroupName { get; set; }   
}

これで、複数のRadioButtonを使用できます(Item.Radiosリストに追加するだけです)。

それはあなたのために働きますか?

于 2012-05-01T18:37:57.783 に答える