我有一个wpf应用程序,其中包含一个充满问题的数据网格。每个问题都有两组radiobutton(好,更好,最好;不重要,重要,最重要)。大约有200个问题被填充到网格中,大约15-20显示而无需滚动。我已经将逻辑降低以允许选择无线电按钮,但是当我滚动时,对象会失去焦点并且不会保留答案。
基本上,我可以回答前20个问题,但是当我向下滚动时,由于数据网格的虚拟化,我失去了答案。我尝试将其关闭,但随后应用程序需要永远加载和排序窗外。我必须保持打开状态。任何人都知道如何在滚动后保持无线电按钮的状态?
答案 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刷新时,该状态将不会被保存并丢失。尝试应用双向绑定。