不幸的是,我无法提供良好的代码示例和场景来重现,但我希望之前有人有同样的问题。
基本上,我所经历的是行为,其中属性更改不会从我的VM升级到绑定属性。
<IdattControls:IdattLookup
Name="DeviceLookup"
DataProvider="{Binding DeviceIdLookupProvider}"
Id="{Binding CurrentItem.DeviceId, Mode=TwoWay, NotifyOnValidationError=True}"
NextFocusableControl="{Binding ElementName=SerialNumberTextBox}"
IsEnabled="{Binding State, Converter={StaticResource NavigatorEnabledConverter}}"
Type="Navigator"
Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" TabIndex="1" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="NavigationCompleted">
<i:InvokeCommandAction Command="{Binding NavigatorPopulatedCommand}" CommandParameter="{Binding Id, ElementName=DeviceLookup}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</IdattControls:IdattLookup>
当NavigationCompleted
事件在我的自定义控件(IdattLookup
)中被触发时 - 视图模型执行一些操作(对服务进行异步调用,获取数据等),并且在异步操作完成时它会更改{{ 1}}属性。
IdattLookup没有获得此State
。
重要且奇怪当我尝试逐步执行propertychanged引发的代码时 - 它可以工作。但是如果我在没有断点的情况下运行它,我的控件就会保持启用状态转换器不会被调用,等等。
我只是猜测它必须与事件和线程有关,但不确定如何正确调试和修复它。
答案 0 :(得分:0)
我弄清楚出了什么问题,但仍然不明白为什么。
IsEnabled属性不是我的new
属性。我只是依靠Control的属性。
由于某种原因,没有提出propertyChanged。现在,在我创建了自己的 - 它神奇地开始工作。它几乎表现得像Mode = OneTime。但有时它神奇地起作用..
答案 1 :(得分:0)
调试是否绑定很有帮助。 在Visual Studio 2010, 首先,您可以进入Menu-&gt; Tools-&gt; Options-&gt; Debugging-&gt; OutputWindow。 然后在WPF跟踪设置中,您可以将数据绑定的值更改为“全部”,以查看是否在输出窗口绑定。