GridView中RadComboBox绑定异常:选中值同步至所有行求助
解决RadGridView中RadComboBox选中值全行重复的问题
嘿,我看了你的代码,立马就发现问题所在了——所有行的RadComboBox都绑定到了同一个全局属性上,难怪改一个值所有行都跟着变!
问题根源
你在CellTemplate和CellEditTemplate里,都是通过RelativeSource去绑定RadGridView的DataContext.AccDocumentItem.Description1,这个AccDocumentItem应该是整个GridView的ViewModel里的全局属性吧?那所有行的这个列自然都会显示同一个值,改的时候也会一起同步变化。
正确的逻辑应该是:每行的内容要绑定到当前行对应的数据项属性,而不是全局的ViewModel属性。
修正方案
我给你调整了代码,核心就是把绑定目标从全局的AccDocumentItem改成当前行的数据项:
1. 修正CellTemplate的绑定
原来的TextBlock绑定的是全局属性,现在改成绑定当前行的Description1(假设你的每行数据对象包含这个属性):
<telerik:GridViewDataColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Description1}"/> </DataTemplate> </telerik:GridViewDataColumn.CellTemplate>
2. 修正CellEditTemplate的绑定
RadComboBox的Text属性同样绑定当前行的Description1,去掉多余的RelativeSource;如果ItemsSource是全局共用的数据源,那可以保留原来的RelativeSource绑定,命令部分如果是全局命令也没问题:
<telerik:GridViewDataColumn.CellEditTemplate> <DataTemplate> <telerik:RadComboBox IsEditable="True" DisplayMemberPath="SLStandardDescriptionTitle" ItemsSource="{Binding DataContext.AccDocumentItem.SelectedSL.SLStandardDescriptions, RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}}" Text="{Binding Description1, Mode=TwoWay}"> <i:Interaction.Triggers> <i:EventTrigger EventName="DropDownOpened"> <i:InvokeCommandAction Command="{Binding DataContext.SLStandardDescriptionsDropDownOpenedCommand, RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}}" CommandParameter="DLType2"/> </i:EventTrigger> </i:Interaction.Triggers> </telerik:RadComboBox> </DataTemplate> </telerik:GridViewDataColumn.CellEditTemplate>
额外注意点
- 确保你的RadGridView的
ItemsSource是绑定到一个数据集合,集合里的每个元素(也就是每行的数据)都包含Description1属性,这样每行的绑定才是独立的。 - 如果
SLStandardDescriptions是每行数据独有的,那ItemsSource的绑定也要改成{Binding SelectedSL.SLStandardDescriptions}(对应当前行数据的属性),而不是找全局的AccDocumentItem。
这样调整后,每行的ComboBox就会独立绑定自己行的数据,不会再出现全行值重复的问题啦!
内容的提问来源于stack exchange,提问作者Elham Azadfar
相关产品推荐
相关产品推荐

