Wpf 数据绑定问题-DataTemplate/ViewModel/ICollectionView

Wpf 数据绑定问题-DataTemplate/ViewModel/ICollectionView,wpf,2-way-object-databinding,Wpf,2 Way Object Databinding,起初,我把这篇文章发到PRISM4论坛上,但有人建议我应该这样做 尝试这个论坛,以及:我正在使用WPF4顺便说一句 我正在运行PRISM4,我一直在努力使数据绑定正常工作。 我遵循MVVM模式,有一个最初加载的视图模型 从RDBMS中获取数据并将其包装在ICollectionView中。这非常有效,数据显示在绑定的DatGrid中,但我在尝试持久化的过程中遇到了困难 对下面声明的DataGrid中显示的数据所做的更改 视图模型通过读/写属性发布ICollectionView, 结果,正如您所看到

起初,我把这篇文章发到PRISM4论坛上,但有人建议我应该这样做 尝试这个论坛,以及:我正在使用WPF4顺便说一句

我正在运行PRISM4,我一直在努力使数据绑定正常工作。 我遵循MVVM模式,有一个最初加载的视图模型 从RDBMS中获取数据并将其包装在ICollectionView中。这非常有效,数据显示在绑定的DatGrid中,但我在尝试持久化的过程中遇到了困难 对下面声明的DataGrid中显示的数据所做的更改

视图模型通过读/写属性发布ICollectionView, 结果,正如您所看到的,它具有双向绑定模式。我想 这将足以保持对系统状态所做的更改 复选框,但不是:我已经尝试了许多方法来实现 这将更改,但复选框的状态不会传播回视图模型。 我截获了对PlotClicked方法的调用,该方法是一个ICommand 对象,但正在传递的参数具有未更改的绘图属性! 当我单击其中一个列标题和 视图已排序-选中的行未选中,这是从数据库检索时复选框的默认状态

我做错了什么

提前多谢-我真的被困在这里了: /彼得

这在某种意义上是行不通的,因为通过单击DataGrid中的复选框列,永远无法将“Plot属性”设置为true!现在我做了以下工作:

public class ResultViewResult : IReslutViewResult
{
    private bool _plot;
    public bool Plot
    {
        get
        {
            return _plot;
        }
        set
        {
            _plot = value;
        }
    } 
    public Guid ResultId { get; set; }
    public DateTime Generated { get; set; }
    public Guid ResultId { get; set; }
    public DateTime Generated { get; set; }
    public int Duration { get; set; }
    ...
你可能会问结果如何?它工作正常,“绘图”设置正确!现在,我想,这太奇怪了!!!因此,我所做的只是简单地注释了私有变量和get/set代码:

public class ResultViewResult : IReslutViewResult
{
    public bool Plot { get; set; }
    //private bool _plot = false;
    //public bool Plot
    //{
    //    get
    //    {
    //        return _plot;
    //    }
    //    set
    //    {
    //        _plot = value;
    //    }
    //} 
    public Guid ResultId { get; set; }
    public DateTime Generated { get; set; }
    public int Duration { get; set; }
    ...

好的,结果如何?它有效!!!???我惊呆了。。。我的意思是第一个和最后一个有什么区别????我对此感到非常尴尬-我的意思是我想知道这里的幕后发生了什么…:

对此不太确定,但我建议您尝试使用ObservableCollection作为ItemsSource。我以前遇到过很多类似的问题,所有这些问题都是通过使用这种收藏解决的,顺便说一句,与经典收藏相比,这种收藏速度更快,消耗更少,用于刷新目的


另外,尝试在IsChecked绑定中添加以下内容:UpdateSourceTrigger=PropertyChanged,这可以做到这一点,我认为这里唯一的问题是源代码没有在正确的时间更新

不确定这是否是您的问题所在,但DataGrid使用了一种数据绑定变体,在您离开行之前不会将更改提交给源。这称为绑定组。也许您没有看到提交的值,因为您还没有离开行


另一种可能是绑定路径不正确?您是否检查了VS中的输出窗口以查看它是否报告了任何绑定路径故障?

您好,Kodo,欢迎来到Stack Overflow。你的问题似乎已经被问过了:看。因此,我担心你的问题有可能被“完全重复”了。不管怎样,我希望我链接的问题能帮助你。嗨!谢谢你的建议,但是这对我没有帮助,所以我添加了一些额外的信息…如果在Plot属性中设置断点,get和set方法调用是否正确?嗨,Rachel!我惊呆了!请看上面的更新部分……有人对这种奇怪的行为有什么解释/建议吗?我已经对项目进行了多次清理/重建,但问题仍然存在,直到我开始更改get/set代码并将其放回。。。此外,我最近还没有做过任何可能会改变某些程序集的自动更新。Í更愿意知道和理解发生了什么,但在这种情况下,我迷失在二进制空间中。。。当然,我很高兴它能起作用,但我完全不知道是什么让它起作用:嗨!谢谢你的建议,但是这对我没有帮助,所以我添加了一些额外的信息…嗨,内森!我向下滚动了几行,并选择了下一行,但在VS输出窗口中没有显示异常。。。无论如何谢谢你
public class ResultViewResult : IReslutViewResult
{
    public bool Plot { get; set; }
    public Guid ResultId { get; set; }
    public DateTime Generated { get; set; }
    public int Duration { get; set; }
    ...
public class ResultViewResult : IReslutViewResult
{
    private bool _plot;
    public bool Plot
    {
        get
        {
            return _plot;
        }
        set
        {
            _plot = value;
        }
    } 
    public Guid ResultId { get; set; }
    public DateTime Generated { get; set; }
    public Guid ResultId { get; set; }
    public DateTime Generated { get; set; }
    public int Duration { get; set; }
    ...
public class ResultViewResult : IReslutViewResult
{
    public bool Plot { get; set; }
    //private bool _plot = false;
    //public bool Plot
    //{
    //    get
    //    {
    //        return _plot;
    //    }
    //    set
    //    {
    //        _plot = value;
    //    }
    //} 
    public Guid ResultId { get; set; }
    public DateTime Generated { get; set; }
    public int Duration { get; set; }
    ...