Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 将数据绑定设置为null并启动新的_Wpf_Data Binding_Null_New Operator_Datacontext - Fatal编程技术网

Wpf 将数据绑定设置为null并启动新的

Wpf 将数据绑定设置为null并启动新的,wpf,data-binding,null,new-operator,datacontext,Wpf,Data Binding,Null,New Operator,Datacontext,我的应用程序类中有一个对象顺序,两者都实现了INotfiyPropertyChanged。 当订单结束时,我将其设置为null,并执行neworder()以重新启动新订单 问题是:其DataContext绑定到Order的对象似乎总是链接到旧的Order 当我重新启动订单时,如果不必再次手动重新绑定,我可以做些什么? 对于具有此DataContext的每个对象,我需要执行object.DataContext=App.Order。我能做些什么来避免这种情况 一些代码: public partial

我的应用程序类中有一个对象顺序,两者都实现了INotfiyPropertyChanged。 当订单结束时,我将其设置为null,并执行neworder()以重新启动新订单

问题是:其DataContext绑定到Order的对象似乎总是链接到旧的Order

当我重新启动订单时,如果不必再次手动重新绑定,我可以做些什么? 对于具有此DataContext的每个对象,我需要执行object.DataContext=App.Order。我能做些什么来避免这种情况

一些代码:

public partial class App : Application, INotifyPropertyChanged
{
    private Order m_order = new Order();

    public Order Order
    {
        get { return m_order; }
        set
        {
            m_order = value;
            NotifyPropertyChanged("Order");
        }
    }
    //...

    public bool getOrderClosed()
    {
        if (Order != null)
        {
             Order = null;
        }

        return (Order == null);
    }

    public bool getOrderOpened()
    {
        if (Order == null)
            Order = new Order();

        return (Order != null);
    }

    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

 //code on the part where the order is finished

    private void Confirm_Click(object sender, RoutedEventArgs e)
    {
        //...
        if (SaveOrder())
        {
            theApp.getOrderClosed();
            theApp.getOrderOpened();
            theApp.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.Basket.DataContext = theApp.Order;
        }

    }

可能会将绑定更改为
UpdateSourceTrigger=PropertyChanged

如果应用正确实现INotifyPropertyChanged,则当您将App.Order设置为新实例时,它将触发,绑定将更新

您确定它已正确实施吗? 例如


几周前我也有类似的问题。我发现将绑定属性分配给新对象时绑定丢失,因此作为一种解决方法,我必须创建一个新的临时对象,然后将所有字段复制到我的绑定属性中,这样可以有效地创建一个新对象并保持绑定


希望这有帮助

如果我理解正确,您的订单对象就是DataContext。如果您在codebehind中设置DataContext,它看起来像:

[some_element].DataContext = myApp.Order;
您需要做的是将数据上下文绑定到myApp.Order。这样,当你做类似的事情时

myApp.Order = new Order(...);
[some_element]的DataContext也将更改。如果将XAML代码发布到使用Order对象作为DataContext的位置,我可以向您展示DataContext上的绑定应该是什么样子


通过您所做的,只有DataContext中的更改将被拾取;当您在DataContext更改时更改正在使用的属性时,DataContext本身不会更改。

这只会影响方向target->source,这不是这里的问题。在我看来:这里的问题不是对象内部的更改,而是在内存中的另一个位置创建新对象,绑定对象的DataContext属性无法适应这种情况。请显示您的确切代码。包含属性实现、设置为null以及似乎不更新的绑定。这一行现在解决了这个问题。theApp.xxxxxxxxxxxxxxxxxxxxxxxxxxxx.Basket.DataContext=theApp.Order;这是一个正确的实现还是一个不正确的例子?我希望是后者。正如您在我的代码中所看到的,这与您的代码类似-唯一的区别是条件if(value!=\u order)-这不会解决任何问题。如果它和我的一起,显然,它不会和你的一起工作。那么你的对象是如何不被更新绑定的呢?它们是“App.Order.SomeProperty”还是其他方法。我们需要看到XAMLIf我观察DataContext,我看到旧顺序的数据,因此,这是不相关的;UserControl封装了字段:其中FirstPhone是Order的一个属性,它通知自己的更改。您是否将数据绑定设置为null,然后在每次创建新订单时将其设置为新对象?Kshitij Mehta:设置绑定,这是FirstPhone UI元素和类似于此的元素的绑定吗?不,我没有设置任何。XAML绑定概念的想法是,您不必接触绑定,并且数据本身会通知对关联绑定的更改吗?可能我必须实现一个Init()函数,该函数会重新初始化Order类中的所有内容。我可以在构造函数中重用这个函数,而不是初始化类成员声明中的所有内容。
myApp.Order = new Order(...);