【发布时间】:2020-08-10 12:56:42
【问题描述】:
我正在尝试解决无法在数据网格中查看可绑定集合的死锁。这是我努力学习 MVVM 的一部分。 MVVM 框架使用 Caliburn Micro 和同一解决方案中的单独类库项目,使用 Dapper 连接到本地 SQL 数据库。 ShellView 和 ShellViewModel 的代码粘贴在下面
ShellView - XAML
<Window x:Class="WPFUI.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFUI.Views"
mc:Ignorable="d"
Title="ShellView" Height="450" Width="800" Background="Red">
<Grid>
<StackPanel Orientation="Horizontal" Width="100" Height="50" VerticalAlignment="Top">
<Button x:Name="LoadCHARecRatesList" Content="CHA Rec Rates"/>
</StackPanel>
<DataGrid ItemsSource="{Binding Path=LstCHARecModels, Mode=OneWay}" Margin="20,100,20,30" AutoGenerateColumns="True">
</DataGrid>
</Grid>
</Window>
ShellViewModel代码如下:
ShellViewModel
public class ShellViewModel : Conductor<object>
{
private BindableCollection<CHARecModel> _lstcharecmodels;
public BindableCollection<CHARecModel> LstCHARecModels
{
get
{return _lstcharecmodels;}
set
{
_lstcharecmodels = value;
NotifyOfPropertyChange(() => LstCHARecModels);
}
}
public void LoadCHARecRatesList()
{
var data = LoadReviewRCRRatesTbl();
_lstcharecmodels = new BindableCollection<CHARecModel>();
foreach (var row in data)
{
_lstcharecmodels.Add(new CHARecModel
{
TDate = row.TDate,
Vendor = row.Vendor,
Code=row.Code,
NameCode=row.NameCode,
Price = row.Price,
RCRStatus=row.RCRStatus,
NameCodeDate = row.NameCodeDate
});
}
}
}
ShellView 上的按钮连接到 LoadCHARecRatesList 方法(它位于负责数据访问的不同类库中,此方法的输出填充可绑定集合 LstCHARecModels)并且 Datagrid 绑定到可绑定集合LstCHARecModels - 可绑定集合正在通知属性更改。目的是当在 UI 上单击按钮时,它将从 SQL 数据库中获取数据并填充数据网格。我无法解决的问题是 Datagrid 保持空白。当我通过在 LoadCHARecRatesList 方法的最后一行放置一个中断来运行代码时,我注意到集合 (LstCHARecModels) 已准确填充到 ShellViewModel 中。当我将鼠标悬停在 ShellView 中以下行
<DataGrid ItemsSource="{Binding Path=LstCHARecModels, Mode=OneWay}" Margin="20,100,20,30" AutoGenerateColumns="True"> 中的 LstCHARecModels 上时,我注意到该集合已冒泡到 Datagrid 定义中(我可以看到所有元素,并且可以钻入每个元素以查看其中的数据- 我注意到它的元素数量和每个元素的内容都是准确的)。但即使在此之后,当我运行项目时,数据网格仍然完全空白。
其他尝试
在定义 Datagrid 时,我还尝试了 ````x:Name="LstCHARecModels"````` 无济于事。
我正在请求有关如何让 bindablecollection 填充数据网格的帮助。从本质上讲,它相信LstCHARecModels 可以在调试模式下在数据网格的绑定中查看,但即使如此接近,数据网格也不会被填充!
【问题讨论】:
-
编辑 尝试寻找解决方案表明,复制方法
LoadCHARecRatesList中的代码并将其粘贴到ShellViewModel构造函数中会填充数据网格。但是试图通过单击按钮触发它来实现与构造函数方法相同的结果,将可绑定集合获取到 ShellView - 但它不会填充 DataGrid。越来越好奇......
标签: wpf mvvm data-binding datagrid caliburn.micro