WPF MVVM应用中嵌套DataGrid选中项绑定ListBox内Expander失败求方案
解决嵌套DataGrid的SelectedItem绑定问题
问题根源
你的DataGrid位于ListBox的ItemTemplate中,此时DataGrid的默认DataContext是Reizen集合中的单个实例,而非父级ViewModel。所以SelectedItem="{Binding GeselecteerdeOnkost}"会尝试绑定到当前Reizen项的GeselecteerdeOnkost属性,若该属性不存在或未正确实现通知,绑定就会失效。
解决方案
方案1:绑定到父级ViewModel的属性
如果GeselecteerdeOnkost是定义在父级ViewModel(即ListBox的DataContext)中的属性,修改SelectedItem的绑定路径,通过RelativeSource向上查找父级ListBox的DataContext:
SelectedItem="{Binding DataContext.GeselecteerdeOnkost, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}, UpdateSourceTrigger=PropertyChanged}"
方案2:为每个Reizen项添加选中属性
如果需要每个Reizen实例独立管理自己选中的Onkost,需在Reizen类中添加GeselecteerdeOnkost属性并实现INotifyPropertyChanged接口:
public class Reizen : INotifyPropertyChanged { // 其他现有属性... private Onkost _geselecteerdeOnkost; public Onkost GeselecteerdeOnkost { get => _geselecteerdeOnkost; set { _geselecteerdeOnkost = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
排查技巧
打开Visual Studio的输出窗口(调试模式下),查看是否有绑定失败的错误提示,比如“无法找到属性GeselecteerdeOnkost”,这类信息能快速定位问题所在。
内容的提问来源于stack exchange,提问作者gilleslag
相关产品推荐
相关产品推荐

