在datagrid中滚动后,WPF Radiobutton丢失状态

时间:2014-04-23 02:03:43

标签: c# wpf datagrid scroll virtualization

我有一个wpf应用程序,其中包含一个充满问题的数据网格。每个问题都有两组radiobutton(好,更好,最好;不重要,重要,最重要)。大约有200个问题被填充到网格中,大约15-20显示而无需滚动。我已经将逻辑降低以允许选择无线电按钮,但是当我滚动时,对象会失去焦点并且不会保留答案。

基本上,我可以回答前20个问题,但是当我向下滚动时,由于数据网格的虚拟化,我失去了答案。我尝试将其关闭,但随后应用程序需要永远加载和排序窗外。我必须保持打开状态。任何人都知道如何在滚动后保持无线电按钮的状态?

2 个答案:

答案 0 :(得分:2)

禁止使用RadioButtons进行虚拟化。尝试使用StackPanel:

<DataGrid x:Name = "MyDataGrid" ItemsSource="{Binding Objects}">
 <DataGrid.ItemsPanel>
  <ItemsPanelTemplate>
   <StackPanel/>
  </ItemsPanelTemplate>
 </DataGrid.ItemsPanel>
 <DataGrid.Columns>
  <DataGridTextColumn Binding="{Binding Name}"/>
   <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
     <DockPanel HorizontalAlignment="Stretch" VerticalAlignment="Center">
      <RadioButton Content="Yes" IsChecked="{Binding Checked, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"/>
      <RadioButton Content="No" IsChecked="{Binding Checked, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource BoolInverterConverter}, Mode=TwoWay}"/>
     </DockPanel>
    </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
  </DataGridTemplateColumn>
 </DataGrid.Columns>
</DataGrid>

答案 1 :(得分:0)

问题可能是您没有将单选按钮的状态绑定到相关的视图模型。因此,当UI刷新时,该状态将不会被保存并丢失。尝试应用双向绑定。