Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
C# 通过绑定访问ViewModel中的自定义类变量_C#_Wpf_Binding - Fatal编程技术网

C# 通过绑定访问ViewModel中的自定义类变量

C# 通过绑定访问ViewModel中的自定义类变量,c#,wpf,binding,C#,Wpf,Binding,我想做的是能够通过viewModel类中的绑定textblock访问对象的属性。假设我想访问存储在viewModel类中的绑定textblock中Orders类的OrderID。 我所做的是: 这与订单的orderID相连,因为当我在ViewModel类中更改orderID时,更改会反映在textblock中。当我尝试从另一个类加载OrderID时,就会出现问题 另一类: 公共类修改顺序 { 私有视图模型边界数据; 公共秩序 { boundData=新的ViewModel(); } publ

我想做的是能够通过viewModel类中的绑定textblock访问对象的属性。假设我想访问存储在viewModel类中的绑定textblock中Orders类的OrderID。 我所做的是:


这与订单的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命令来引导订单和其他类,可能是这样,但我如何解决这个问题?