Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
Wpf 属性在更改Usercontrols DependencyProperty时重置_Wpf_Mvvm_Dependency Properties_Inotifypropertychanged_Postsharp - Fatal编程技术网

Wpf 属性在更改Usercontrols DependencyProperty时重置

Wpf 属性在更改Usercontrols DependencyProperty时重置,wpf,mvvm,dependency-properties,inotifypropertychanged,postsharp,Wpf,Mvvm,Dependency Properties,Inotifypropertychanged,Postsharp,我已经构建了一个“小部件”的“管理器”,其中有一个包含小部件的ListView/GridView ListView将SelectedItem绑定到(Manager)ViewModel上的SelectedWidget属性 SelectedWidget通过名为“Widget”的DependencyProperty绑定到名为WidgetConfig的Usercontrol,您可以在其中修改所选Widget的属性 在WidgetConfig中,有2个单选按钮: <RadioButton Group

我已经构建了一个“小部件”的“管理器”,其中有一个包含小部件的ListView/GridView

ListView将SelectedItem绑定到(Manager)ViewModel上的SelectedWidget属性

SelectedWidget通过名为“Widget”的DependencyProperty绑定到名为WidgetConfig的Usercontrol,您可以在其中修改所选Widget的属性

在WidgetConfig中,有2个单选按钮:

<RadioButton GroupName="Lead" IsChecked="{Binding Widget.prop1, Mode=TwoWay, ElementName=root}" />
<RadioButton GroupName="Lead" IsChecked="{Binding Widget.prop2, Mode=TwoWay, ElementName=root}" />

当我选择“prop2”时,INPC信号正确发送,模型相应更新。然后,如果我点击“prop1”,INPC信号将被发送+我从prop2单选按钮获得额外的信号

问题是: 如果我选择prop2,然后在ListView中选择另一个小部件。我收到一个INPC信号,prop2已变回false

发生什么事了

一些信息:

  • WidgetConfiguration是使用PostSharp NotifyPropertyChanged特性实现的
  • WidgetConfig用户控件通过DependencyProperty和INotifyPropertyChanged接口手动实现
编辑:


我在这里创建了一个可复制的示例:

您拥有的是一个双向绑定链,它正在更改模型上的值:

ListControl.SelectedItem(DP)和ViewModel.SelectedModel(INPC)之间的双向绑定

ViewModel.SelectedModel(INPC)和ModelControl.ActiveModel(DP)之间的双向绑定

ModelControl.ActiveModel(DP)和Model.Prop1/Model.Prop2/Model.Name(INPC)之间的双向绑定

当您依次选择First、Second和First时,WPF数据绑定会将Second的prop2覆盖为false

解决此问题的一种方法是删除覆盖prop2的双向绑定,即在RadioButton绑定上指定Mode=OneWay


我对正在发生的事情的猜测:RadioButton的逻辑和双向绑定。当在列表框中选择Second并将选择更改为First时,WPF的数据绑定将Prop1单选按钮设置为选中(因为First.Prop1==true)。此时,第二个单选按钮仍处于选中状态,因此为了尊重组原则,需要取消选中该按钮。但是,在Prop2收音机上仍然有双向绑定处于活动状态,因此Second.Prop2被设置为false。

那么您在代码中的什么位置将
Prop2
设置回
false
?在属性的setter中放置断点以查找。如果你想让任何人都能指出你的问题所在,也可以发布一些可以复制你的问题的最小代码。它是由截取的代码设置的:[截取的]Client.exe!。。。。。SelectedWidget.set(…WidgetConfiguration值)我将查看是否可以摘录一段可复制的代码。我已经创建了Git Repo,示例为“需要PostSharp”!?您是否尝试删除了
GroupName=“Lead”
?PostSharp是一个AOP框架,可以轻松创建INPC对象。。。