C# 绑定到对象的新实例

C# 绑定到对象的新实例,c#,wpf,xaml,C#,Wpf,Xaml,我试图弄清楚如何在不破坏任何XAML绑定的情况下创建对象的新实例。现在我正在使用的是一个observetecollection,我将其称为: Container.MyClass.MyCollection 在我的ViewModel中(通过一种魔术实现了INPC): 但是,如果我调用此方法: public MyClass BrokenFreshInstance() { var myClass = new MyClass(); myClass.MyCollection.Add(ne

我试图弄清楚如何在不破坏任何XAML绑定的情况下创建对象的新实例。现在我正在使用的是一个
observetecollection
,我将其称为:

Container.MyClass.MyCollection
在我的ViewModel中(通过一种魔术实现了INPC):

但是,如果我调用此方法:

public MyClass BrokenFreshInstance()
{
    var myClass = new MyClass();

    myClass.MyCollection.Add(new MyObject() { Name = "Test1" });
    myClass.MyCollection.Add(new MyObject() { Name = "Test2" });

    return myClass;
}
然后:

Container.MyClass = Initialize.BrokenFreshInstance();

绑定不再更新。是否有任何方法可以使用对象的新实例并使XAML绑定保持完整?

如果属性返回的实例发生更改,则需要为
集合触发
PropertyChanged
事件。

您可以通过在可观察到:

public ObservableCollection<MyObject> Collection
{
    get { return _collection; }
    set 
    {
        _collection = value;
        RaisePropertyChangedEvent("Collection");
    }
}
或者,您可以通过执行以下操作手动进行更改:

Container.MyClass = Initialize.BrokenFreshInstance();
RaisePropertyChangedEvent("Collection");

你的第一个解决方案奏效了。然而,由于我使用了某种魔法,我甚至不需要手动调用
RaisePropertyChanged
;我只需要分配一个场和一个二传手。有没有办法绕过这个问题,仍然能够简单地从getter返回值?不管怎样,我感谢你的帮助!此外,属性与命令位于不同的ViewModel中,因此我认为您的第二个答案对我不起作用。请注意,一旦手动指定了值,自动属性就可以正常工作。谢谢你的帮助!然后我会选择第一种方法。您可以通过手动提升来实现它
RaisePropertyChangedEvent(“Collection”)。然而,我需要看更多的代码才能真正理解包含集合的父类是如何工作的。
Container.MyClass = Initialize.BrokenFreshInstance();
public ObservableCollection<MyObject> Collection
{
    get { return _collection; }
    set 
    {
        _collection = value;
        RaisePropertyChangedEvent("Collection");
    }
}
 Collection = Container.MyClass.MyCollection;   //This will trigger the PropertyChangedEvent
 ...
 Container.MyClass = Initialize.BrokenFreshInstance();
 Collection = Container.MyClass.MyCollection;   // Trigger again..
Container.MyClass = Initialize.BrokenFreshInstance();
RaisePropertyChangedEvent("Collection");