Mvvm Datagrid不显示数据,即使其boudn

Mvvm Datagrid不显示数据,即使其boudn,mvvm,datagrid,wpftoolkit,Mvvm,Datagrid,Wpftoolkit,我的MVVM Light实现有一个问题,我将WPF工具包DataGrid和数据上下文绑定到正确的对象,但没有显示任何数据。有人能告诉我我做错了什么吗 这是我的密码: MainViewModel.cs public类MainViewModel:ViewModelBase { 私有静态记录器Logger=LogManager.GetCurrentClassLogger(); private C.Wsi.ClientSession private会话; 私人可观察收款(现金账户);; 公共收款现金账户

我的MVVM Light实现有一个问题,我将WPF工具包DataGrid和数据上下文绑定到正确的对象,但没有显示任何数据。有人能告诉我我做错了什么吗

这是我的密码:

MainViewModel.cs

public类MainViewModel:ViewModelBase
{
私有静态记录器Logger=LogManager.GetCurrentClassLogger();
private C.Wsi.ClientSession private会话;
私人可观察收款(现金账户);;
公共收款现金账户
{
获取{return\u cashcounts;}
设置
{
如果(_cashcounts.Equals(value))
{
回来
}
_现金账户=价值;
筹集财产变更(“现金账户”);
}
}
/// 
///初始化MainViewModel类的新实例。
/// 
公共主视图模型()
{
如果(IsInDesignMode)
{
//代码在混合-->创建设计时数据中运行。
}
其他的
{
_现金账户=新的可观察集合();
//订阅CollectionChanged事件
_cashaccounts.CollectionChanged+=OnCashAccountListChanged;
logger.Info(“----开始------”);
//代码“真实地”运行
Cs.Helper.Session Session=新会话();
privateSession=session.getSession();
Info(“私有会话:+privateSession.GetHashCode());
logger.Info(“…已连接…”);
Cs.Helper.ResultSet results=新结果集();
PositionBean[]pos=results.getPositions(privateSession);
logger.Info(“返回的位置:“+pos.Length”);
SecurityBean[]secs=results.getSecurities(privateSession);
logger.Info(“返回的证券:+secs.Length”);
ArrayBuilder ab=新的ArrayBuilder(pos,秒);
现金账户c=新的现金账户();
c、 qtySod=100.00;
c、 name=“Hi”;
c、 account=“Acct1”;
c、 现金金额=67.00;
_现金账户。添加(c);
筹集财产变更(“现金账户”);
//这是。_cashcounts=ab.joinPositionSecurities();
}
}
void OnCashAccountListChanged(对象发送方,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
}
////公共覆盖无效清除()
////{
//////如果需要,请清理
////base.Cleanup();
////}
}
MainWindow.xaml


Margin=“5”AutoGenerateColumns=“True”水平滚动条可见性=“False”>

当您在窗口中执行
DataContext=“{Binding Path=Main,Source={StaticResource Locator}}}”操作时,在Datagrid中的
DataContext=“{Binding MainViewModel}”
之后,WPF会尝试绑定到
MainViewModel
类上名为MainViewModel
属性,这将失败。您可以通过在VS中的输出窗口中查找绑定错误来确认这一点。
只需从
DataGrid
中删除
DataContext=“{Binding MainViewModel}”
,它就可以工作了

编辑: 在XAML的第一行末尾有一个额外的结束>:

<dg:DataGrid DataContext="{Binding MainViewModel}" ItemsSource="{Binding CashAccounts}">
          Margin="5" AutoGenerateColumns="True" HorizontalScrollBarVisibility="False">

Margin=“5”AutoGenerateColumns=“True”水平滚动条可见性=“False”>
应该是:

<dg:DataGrid DataContext="{Binding MainViewModel}" ItemsSource="{Binding CashAccounts}"
          Margin="5" AutoGenerateColumns="True" HorizontalScrollBarVisibility="Disabled">

注意:
False
不是
HorizontalScrollBarVisibility
的有效值,它支持
Auto、Disabled、Hidden、Visible


但我不知道为什么在使用ItemsSource时WPF抛出
操作无效。使用ItemsControl.ItemsSource访问和修改元素,而不是针对原始XAML,而不是一些更有意义的错误。

我最初这样做是因为这似乎适用于MVVM Light。但是,当您执行此操作时,会得到以下结果:{“在使用ItemsSource时,操作无效。请改为使用ItemsControl.ItemsSource访问和修改元素。”},这就是我添加它的原因。当我使用Snoop并使用前面的实现时,我可以看到我的可观察集合已绑定。有什么想法吗?我可以纠正你的错误,我已经用我的发现更新了我的答案。
<dg:DataGrid DataContext="{Binding MainViewModel}" ItemsSource="{Binding CashAccounts}">
          Margin="5" AutoGenerateColumns="True" HorizontalScrollBarVisibility="False">
<dg:DataGrid DataContext="{Binding MainViewModel}" ItemsSource="{Binding CashAccounts}"
          Margin="5" AutoGenerateColumns="True" HorizontalScrollBarVisibility="Disabled">