非常简单的任务,但源代码不能完成所需的工作......请指教。
班级中有产品系列(方法基于MVVm模式,但这不是当前问题的影响):
public class ProductWindowViewModel : WorkspaceViewModel // implements INotifyPropertyChanged
{
public ProductWindowViewModel()
{
Products = new List<Product>(ProductService.Instance.Repository.GetAll());
}
List<Product> Products { get; set; }
}
这是类声明:
public class Product : IEntity
{
#region Public Properties
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int Cost { get; set; }
#endregion
}
类实例绑定到窗口的网格数据上下文:
ProductWindow wnd = new ProductWindow();
wnd.MainGrid.DataContext = new ProductWindowViewModel();
wnd.ShowDialog();
这是窗口的xaml代码:
<Window x:Class="WpfTest1.ProductWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ProductWindow" Height="300" Width="300" xmlns:igDP="http://infragistics.com/DataPresenter"
xmlns:ViewModel="clr-namespace:ViewModel;assembly=ViewModel">
<Grid x:Name="MainGrid">
<Grid.Resources>
<ObjectDataProvider x:Key="odpObjectDataProvider" ObjectType="{x:Type ViewModel:ProductWindowViewModel}" />
</Grid.Resources>
<Grid DataContext="{StaticResource odpObjectDataProvider}">
<igDP:XamDataGrid DataSource="{Binding Path=Products}"/>
</Grid>
</Grid>
xamDataGrid样本是相同的。整体代码非常简单,但不起作用。
有人知道为什么吗?欢迎任何想法。
我如何调试绑定以解决问题?
感谢。
答案 0 :(得分:1)
好吧,也许这不能完全回答你的问题,但看起来你正在实例化你的viewmodel类两次。一旦进入你的代码,在创建窗口后立即进入,并在ObjectDataProvider中进行一次。如果您选择其中一个,它可能会更容易调试。建议:
1.注释掉这一行:wnd.MainGrid.DataContext = new ProductWindowViewModel();
2.在viewmodel的构造函数中设置断点
3.启动它并查看断点是否被击中。如果它确实被击中,你知道你正在做正确的事情。
另外,检查visual studio中的输出窗口,看看是否有报告任何绑定异常。
答案 1 :(得分:0)
在我的例子中,windows构造函数中的代码是多余的。现在一切正常,似乎删除了不必要的任务解决了一个问题。