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

WPF MVVM模式下XamDataGrid绑定XML数据无法正常填充问题求助

问题原因及修复方案

1. 大小写不匹配导致XPath查询无结果

XML节点名称大小写敏感,你调试用的硬编码XML中使用的是小写<row>节点,但XAML绑定中写的是大写XPath=Row,无法匹配到任何行数据,因此网格为空。

修复建议:统一XML节点名和XPath规则,推荐按照你最初的设计统一使用大写<Row>作为行节点名称。

2. 绑定路径配置错误

你直接将XmlDataProvider实例赋值给SelectedTableData,但XamDataGrid需要绑定的是XmlDataProvider执行查询后返回的节点集合,即Data属性,而非provider实例本身。

修复建议:要么在C#代码中直接把查询后的节点集合赋值给绑定属性,要么在XAML绑定中指定路径为SelectedTableData.Data。

3. 自动生成列未显式开启

XamDataGrid需要显式开启自动生成列配置,才会根据XML节点的属性动态生成对应列,若关闭了该配置也会显示为空网格。

修复建议:在XamDataGrid属性中添加AutoGenerateColumns="True"。

4. 布局配置导致控件收缩

你给XamDataGrid设置的HorizontalAlignment="Left" VerticalAlignment="Top",无数据时控件会自适应内容缩成小点,不利于调试。

修复建议:改为HorizontalAlignment="Stretch" VerticalAlignment="Stretch",让控件占满父容器。

5. 未触发属性变更通知

MVVM模式下绑定的属性需要在值变更时触发INotifyPropertyChanged的PropertyChanged事件,否则UI收不到更新通知,不会刷新绑定。

修复建议:在SelectedTableData属性的setter中添加属性变更通知逻辑。


调整后代码示例

C# ViewModel代码

// 确保ViewModel实现了INotifyPropertyChanged接口
private XmlDataProvider _selectedTableData;
public XmlDataProvider SelectedTableData
{
    get => _selectedTableData;
    set 
    { 
        _selectedTableData = value;
        // 触发属性变更通知,这步不能少
        OnPropertyChanged(nameof(SelectedTableData));
    }
}

// 加载XML数据逻辑
private void LoadLookupTable()
{
    XmlDocument lookupValueDoc = new XmlDocument();
    // 统一使用大写<Row>节点,属性按设计放在节点属性中
    string s = "<?xml version='1.0' ?><Root><Row test1=\"aaaa\" test2=\"bbbb\" testa=\"AAA\"/></Root>";
    lookupValueDoc.LoadXml(s);

    XmlDataProvider provider = new XmlDataProvider
    {
        Document = lookupValueDoc,
        // 直接在provider层完成行节点查询
        XPath = "/Root/Row"
    };

    SelectedTableData = provider;
}

XAML控件代码

<igDP:XamDataGrid Name="LookupGrid" Margin="5"  GroupByAreaLocation="None"  Grid.Row="2" 
            HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
            DataSource="{Binding SelectedTableData.Data}"
            AutoGenerateColumns="True"
            BorderThickness="1" BorderBrush="DarkCyan" ScrollViewer.VerticalScrollBarVisibility="Auto" 
            RecordUpdated="LookupGrid_RecordUpdated"
            IsUndoEnabled="True" UndoLimit="50" DataSourceChanged="XamDataGrid_DataSourceChanged"
            Visibility="Visible" >
    <!-- 其余自定义配置 -->
</igDP:XamDataGrid>

额外调试建议

如果修改后仍有问题,可以先把XamDataGrid替换为WPF原生DataGrid测试,若原生控件可以正常显示,则问题出在Infragistics控件的专属配置上,可在DataSourceChanged事件中手动遍历XML节点的属性,动态生成对应FieldLayout,每个字段的绑定路径设置为@属性名(比如@test1)即可。

内容的提问来源于stack exchange,提问作者DeadZone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 20:45:03