我在App类中有一个对象Order,它们都实现了INotfiyPropertyChanged。 订单结束时,我将其设置为null并执行新订单()以重新启动新订单。
问题是:似乎DataContext绑定到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;
}
}
答案 0 :(得分:2)
如果我理解正确,您的Order对象是 DataContext。如果你在代码隐藏中设置DataContext,它看起来像是:
[some_element].DataContext = myApp.Order;
您需要做的是绑定 DataContext到myApp.Order。这样,当您执行类似
的操作时myApp.Order = new Order(...);
[some_element]的DataContext也会改变。如果您将XAML代码发布到使用Order对象作为DataContext的位置,我可以准确地向您显示您对DataContext的绑定应该是什么样的。
使用您已完成的操作,只会拾取 DataContext中的更改;当您在DataContext更改时更改您正在使用的属性时,DataContext本身不会。
答案 1 :(得分:1)
希望这有帮助!
答案 2 :(得分:0)
可能会将绑定更改为UpdateSourceTrigger=PropertyChanged
?
答案 3 :(得分:0)
如果App正确实现了INotifyPropertyChanged,则在将App.Order设置为新实例时会触发,并且绑定将更新。
您确定它已正确实施吗? 例如
class App
{
public Order Order
{
get
{
return _order;
}
set
{
if (value != _order)
{
_order = value;
FirePropertyChanged("Order");
}
}
}
}