Dynamic-data中SourceList新增项选中/取消选中时绑定不生效的问题求助
Dynamic-data中SourceList新增项选中/取消选中时绑定不生效的问题求助
兄弟,我之前也踩过类似的坑,咱们来一步步捋清楚问题出在哪,然后解决它~
首先,从你的代码和描述来看,新增项能正常显示但IsSelected和ToggleButton.IsChecked的绑定失效,最常见的原因是你的实体类T没有实现INotifyPropertyChanged接口。
核心问题分析:
你在Transform里直接修改了item的DisplayOrder然后返回原对象,如果T没有实现属性变更通知,那么新增项的IsSelected属性变化时,无法通知UI更新绑定状态,自然就会出现“绑定不工作”的情况。
解决方案一:给实体类添加属性变更通知
确保你的T类型实现INotifyPropertyChanged,并且IsSelected、DisplayOrder这些绑定的属性在变更时触发PropertyChanged事件,示例代码如下:
public class YourItemType : INotifyPropertyChanged { private bool _isSelected; public bool IsSelected { get => _isSelected; set { if (_isSelected != value) { _isSelected = value; OnPropertyChanged(); } } } private int _displayOrder; public int DisplayOrder { get => _displayOrder; set { if (_displayOrder != value) { _displayOrder = value; OnPropertyChanged(); } } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
解决方案二:确保订阅不被GC回收
你当前的代码里直接调用了.Subscribe(),但没有保存返回的IDisposable对象。如果这个订阅被垃圾回收,后续SourceList的更新(包括新增项)就无法同步到ActiveList。建议把订阅对象存起来:
// 在ViewModel里添加一个字段保存订阅 private IDisposable _listUpdateSubscription; // 初始化时赋值 _listUpdateSubscription = SourceList.Connect() .Filter(criteria, ListFilterPolicy.ClearAndReplace) .Transform((item, i) => { item.DisplayOrder = i + 1; return item; }) .Bind(out ActiveList) .Subscribe(); // 记得在ViewModel销毁时释放(比如在Dispose方法里) public void Dispose() { _listUpdateSubscription?.Dispose(); SourceList?.Dispose(); }
额外检查项:
- 确认ItemsControl的ItemTemplate绑定正确,显式指定
TwoWay模式(虽然ToggleButton的IsChecked默认是TwoWay,但显式写更保险):
<ItemsControl x:Name="listItemsControl"> <ItemsControl.ItemTemplate> <DataTemplate> <ToggleButton IsChecked="{Binding IsSelected, Mode=TwoWay}" Content="{Binding DisplayOrder}" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
- 确认新增的项通过了Filter规则(你说新增项能显示,这点应该没问题,但如果Filter有动态逻辑可以再验证下)。
按照上面的步骤调整后,新增项的绑定应该就能正常工作了~
备注:内容来源于stack exchange,提问作者Hadi
相关产品推荐
相关产品推荐

