You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:32:51