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