首页 > 解决方案 > WPF DependencyProperty 使用默认值 iso new 更新视图模型

问题描述

我正在研究我自己创建的仪表控件在启动/创建期间无法正确处理绑定的问题。一旦用户控件和视图模型被实例化并设置了所有绑定,它就可以正常工作。

我有以下控制(所有用户代码):

    <linearGauge:LinearGaugeControl
        Grid.Row="2"
        Margin="30, 0, 0, 0"
        GaugeLabel="Flow"
        LinearGaugeLength="800"
        LinearGaugeHeight="80"
        LabelFontSize="20"
        NeedleColor="Black"
        Grid.Column="0" Grid.ColumnSpan="2"
        DataContext="{Binding FlowGaugeData}" />

这个问题是关于上面 xaml 中的两个属性:

这些属性绑定到的视图模型LinearGaugeControl

<UserControl.Resources>
    <Style TargetType="local:LinearGaugeControl">
        <Setter Property="LinearGaugeLength" Value="{Binding GaugeSize, Mode=OneWayToSource}"/>
        <Setter Property="LinearGaugeHeight" Value="{Binding BarThickness, Mode=OneWayToSource, NotifyOnSourceUpdated=True}"/>
    </Style>
</UserControl.Resources>

从我之前与 DP 的斗争中,我从用户 ASh 那里学到了一些有用的东西,我可以向我的 DP 添加回调,这样我至少知道它会被触发。这很好用。DP的回调以LinearGaugeHeight80 的“新”值(旧值 = 50)触发。

在那次事件之后,我的二传手被调用,但值错误!(50,DP的默认值)。

出了什么问题?

这是因为视图是在视图模型之前创建的吗?

回复@Clemens:

我们正在使用caliburn,这会以某种方式导致这个问题吗?我想我在某处读到 caliburn 在后台使用 DataContext=this?

标签: c#wpf

解决方案


推荐阅读