C# 通过绑定访问ViewModel中的自定义类变量
我想做的是能够通过viewModel类中的绑定textblock访问对象的属性。假设我想访问存储在viewModel类中的绑定textblock中Orders类的OrderID。 我所做的是:C# 通过绑定访问ViewModel中的自定义类变量,c#,wpf,binding,C#,Wpf,Binding,我想做的是能够通过viewModel类中的绑定textblock访问对象的属性。假设我想访问存储在viewModel类中的绑定textblock中Orders类的OrderID。 我所做的是: 这与订单的orderID相连,因为当我在ViewModel类中更改orderID时,更改会反映在textblock中。当我尝试从另一个类加载OrderID时,就会出现问题 另一类: 公共类修改顺序 { 私有视图模型边界数据; 公共秩序 { boundData=新的ViewModel(); } publ
这与订单的orderID相连,因为当我在ViewModel类中更改orderID时,更改会反映在textblock中。当我尝试从另一个类加载OrderID时,就会出现问题
另一类:
公共类修改顺序
{
私有视图模型边界数据;
公共秩序
{
boundData=新的ViewModel();
}
public void ChangeOrderID()
{
boundData.Order.OrderID=10;
}
}
此处的更改不会转移到ViewModel类中的静态顺序
这是viewModel类:
公共类视图模型:INotifyPropertyChanged
{
私人订单(u订单),;
公共秩序
{
获取{return\u Order;}
设置
{
如果(_Order!=值)
{
_顺序=价值;
}
}
}
公共视图模型()
{
订单=新订单();
}
公共事件属性更改事件处理程序属性更改;
私有void OnPropertyChanged([CallerMemberName]字符串propertyName=null)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
}
我已将ViewModel类加载到UI的DataContext中,ViewModel类中的其他绑定变量工作正常,但由于某些原因,绑定的textblock没有访问Order.OrderID(我认为这不是问题,因为我可以修改ViewModel类中的Order.OrderID,并且会反映更改)或者正在修改我的订单的类无法修改OrderID
我已经尝试用新的OrderID加载一个新的Order类,然后用ModifyOrder的新订单加载ViewModel的_订单,但也没有成功
这是Orders类:
公共类顺序:INotifyPropertyChanged
{
私有int_OrderID;
公共整型医嘱ID
{
获取{return\u OrderID;}
设置
{
if(_OrderID!=值)
{
_OrderID=值
OnPropertyChanged(nameof(OrderID));
}
}
}
公共事件属性更改事件处理程序属性更改;
私有void OnPropertyChanged([CallerMemberName]字符串propertyName=null)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
}
请记住,在过去的48小时里,我已经了解了所有关于数据绑定的知识,所以请耐心听我说
非常感谢您的任何帮助。谢谢! 您需要在Orders类中实现INotifyPropertyChanged。
您需要在所有setter中调用OnPropertyChanged()。视图模型在哪里实例化?我猜,因为您正在ModifyOrder类中重新创建viewmodel实例
boundData=newviewmodel()代码>
绑定丢失,可能是因为它没有显示 …是的,所以。是因为
公共视图模型()
{
订单=新订单();
}
每次实例化ViewModel类时,都会清除它中的private static Orders\u Order
,所以我将它改为
公共视图模型()
{
如果(_Order==null)
{
订单=新订单();
}
}
这就解决了问题
感谢所有帮助过我的人!我从你们身上学到了很多
我要哭着睡觉了,现在你不能在你的设置程序中调用OnPropertyChanged
。您还需要对Orders
类中的属性执行此操作,例如OrderID
等@MarkFeldman您对OrderID调用OnPropertyChanged
是什么意思?它在另一个类中,所以我不能在那里调用它。我是否也必须复制ViewModel类中的属性才能执行此操作?正确。更改通知不会“自动神奇地”发生,WPF控件专门查找INotifyPropertyChanged事件来更新自己。这意味着您必须将INPC添加到基础数据对象中(通常不赞成,但可以手动或手动完成)或者,您必须将其设计到视图模型层中,并使用您最方便的方法处理该层和模型层之间的更新。我刚刚在代码和问题中对其进行了更改,但问题仍然存在。PropertyChanged
事件处理程序是否也必须连接到ViewModel类中的事件处理程序?如果是这样的话,我该怎么做呢?你能发布使用虚拟机的XAML吗?“PropertyChanged事件处理程序也必须连接到ViewModel类中的处理程序?”NoOkay,我已将其添加到问题中。ViewModel对象是否设置为视图的datacontext?ModifyOrder类的用途是什么?您可以在ViewModel中执行这些操作是的,我将ViewModel设置为视图的datacontext,ModifyOrder类是一个中间类,它包含mysql命令来引导订单和其他类,可能是这样,但我如何解决这个问题?