Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/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# 如何告诉UI在模型中更改的绑定WPF属性已更新_C#_Wpf_Xaml - Fatal编程技术网

C# 如何告诉UI在模型中更改的绑定WPF属性已更新

C# 如何告诉UI在模型中更改的绑定WPF属性已更新,c#,wpf,xaml,C#,Wpf,Xaml,我是WPF的新手,尝试尽可能地坚持MVVM模式。到目前为止还不错,只是我在绑定模型中的某些属性时遇到了问题 因此,我在模型中公开了非静态属性,但它们只能在模型中更改。我运行了一个函数,它做了很多事情,它通过一系列参数跟踪它在做什么,我已经公开了这些参数以供查看 当我的ViewModel中有属性时,我就可以了——我可以更新这些属性,因为我已经实现了INotifyPropertyChanged。我已经看到,有时人们也在他们的模型中实现了这一点,所以我尝试了,但不知道INotifyPropertyCh

我是WPF的新手,尝试尽可能地坚持MVVM模式。到目前为止还不错,只是我在绑定模型中的某些属性时遇到了问题

因此,我在模型中公开了非静态属性,但它们只能在模型中更改。我运行了一个函数,它做了很多事情,它通过一系列参数跟踪它在做什么,我已经公开了这些参数以供查看

当我的ViewModel中有属性时,我就可以了——我可以更新这些属性,因为我已经实现了INotifyPropertyChanged。我已经看到,有时人们也在他们的模型中实现了这一点,所以我尝试了,但不知道INotifyPropertyChanged是如何工作的,我不知道一旦它在模型中运行,我是否还需要做些什么才能让它正常运行

我试图在ViewModel中创建一个从模型中读取的属性,并将xaml绑定到此属性,但由于无法从ViewModel中更改它,因此遇到了告诉UI它已更改的相同问题。目前,我有直接绑定,同时我尝试解决这个问题,但我的目标是能够绑定到ViewModel中的一个属性,该属性仅从模型中获取值

有谁能给我一个简单的例子,说明如何单向绑定到标签/文本块等基本控件,当这些控件在模型中发生更改时,这些控件会自动更新

为了完整起见,这里是一个简化版本,包括示例xaml(显示绑定到模型属性和绑定到ViewModel中的属性)。绑定可以工作,因为如果我在模型中进行更改,它们会出现在设计器和初始构建中

该模型是我自己的代码,我可以添加/删除任何东西以使其工作。也许这相当简单,但我现在没有看到解决方案,也没有在论坛上看到任何对我有意义的东西

谢谢

在模型中 在xaml中
我的一个朋友也犯了同样的错误

  // rest of class including code that changes the above **_TempRelayValue**
在这里,您已设定要更改\u tempRelayVAlue变量。变量没有与之关联的任何通知。因此,您需要做的是通过如下所示的proerty设置值,这应该会通知UI模型或VM值已更改。正如您在属性中而不是在变量中实现Notify一样

TempRelayValue  = yourvalues;

我的一个朋友也犯了同样的错误

  // rest of class including code that changes the above **_TempRelayValue**
在这里,您已设定要更改\u tempRelayVAlue变量。变量没有与之关联的任何通知。因此,您需要做的是通过如下所示的proerty设置值,这应该会通知UI模型或VM值已更改。正如您在属性中而不是在变量中实现Notify一样

TempRelayValue  = yourvalues;


如果您试图遵循MVVM,那么绝对不应该将视图(XAML)直接绑定到模型!您似乎完全缺少视图模型部分。MVVM有很多很好的例子,所以不妨去看看。一个开始的地方也许我不明白,但您正在创建一个新的
自动校准实例
,并将其分配给TextBlock的
数据上下文
。是否有任何代码稍后引用和修改该实例?您对MVVM中的“模型”有何解释?当TempRelayValue属性更改时,代码中发生了什么?有什么变化吗?既然你已经有了一个应该绑定到的viewmodel,为什么还要这样绑定呢?@DaveWilliams澄清了这个问题,说我本来把它绑定到了viewmodel上,但仍然被卡住了,正在尝试一些东西,我现在把它绑定到了模型上。在试图解决这个问题时,分离度降低了一度。我以后会“把它拉出来”的!感谢阅读链接,看看我是否能在那里找到解决方案。@slugster请参阅我对Dave Williams的评论如果您试图遵循MVVM,则绝对不应将视图(XAML)直接绑定到模型!您似乎完全缺少视图模型部分。MVVM有很多很好的例子,所以不妨去看看。一个开始的地方也许我不明白,但您正在创建一个新的
自动校准实例
,并将其分配给TextBlock的
数据上下文
。是否有任何代码稍后引用和修改该实例?您对MVVM中的“模型”有何解释?当TempRelayValue属性更改时,代码中发生了什么?有什么变化吗?既然你已经有了一个应该绑定到的viewmodel,为什么还要这样绑定呢?@DaveWilliams澄清了这个问题,说我本来把它绑定到了viewmodel上,但仍然被卡住了,正在尝试一些东西,我现在把它绑定到了模型上。在试图解决这个问题时,分离度降低了一度。我以后会“把它拉出来”的!感谢您阅读链接,看看我是否能在那里找到解决方案。@slugster请参阅我对Dave WilliamsSorry的上述评论,但不是通过私有变量更改TempRelayValue,而是通过公共属性进行更改。那是个打字错误。我改变了它,澄清了这个问题。仍然感谢你指出这一点!好啊我认为您在绑定中使用的实例和代码中包含的内容方面有误。您是否在代码中创建新实例并尝试设置值。?只创建了该实例的单个实例(如我所见)。看我在问题下对克莱门斯的评论。我以前确实掉进了这个陷阱,在那里我创建了4个模型实例——这很混乱,但后来我意识到每次你在
DataContext
中提到这个模型时,它都会创建一个新的itI实例,它对类有一个静态引用,该引用在第一次实例化时设置,以便在代码中每当我需要更改任何一个实例成员,我请求