1

我认为这是尝试将视图绑定到视图模型中的依赖属性的最简单案例之一。最初的更改似乎反映在视图中,但对 DP 的其他更改不会更新视图的 TextBlock。我可能只是错过了一些简单的东西,但我看不出它是什么。请看一下...

我的 XAML 在窗口底部有一个状态栏。我想绑定到 DP“VRAStatus”。

        <StatusBar x:Name="sbar" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" 
               VerticalAlignment="Bottom" Background="LightBlue" Opacity="0.4" DockPanel.Dock="Bottom" >
            <StatusBarItem>
                <TextBlock x:Name="statusBar" Text="{Binding VRAStatus}" />
            </StatusBarItem>
            <StatusBarItem>
                <Separator Style="{StaticResource StatusBarSeparatorStyle}"/>
            </StatusBarItem>
        </StatusBar>

我的视图模型定义了 DP:

    public string VRAStatus
    {
        get { return (string)GetValue(VRAStatusProperty); }
        set { SetValue(VRAStatusProperty, value); }
    }

    // Using a DependencyProperty as the backing store for VRAStatus. 
    public static readonly DependencyProperty VRAStatusProperty =
        DependencyProperty.Register("VRAStatus", typeof(string), typeof(PenskeRouteAssistViewModel),new PropertyMetadata(string.Empty));

然后,在我的代码中,我设置了 DP:

        VRAStatus = "Test Message...";

这里有什么明显的我想念的吗?在视图模型的构造函数中,我将 DP 设置为:

        VRAStatus = "Ready";

我从来没有显示测试消息。

4

5 回答 5

4

您需要在 .

于 2010-11-04T08:13:14.500 回答
1

事实证明,事情比我想象的要复杂一些(比如,什么时候不是这样:)我的 RibbonControl 位于 UserControl 中,以便从 MainWindow 中获取所有 XAML。正是因为它位于 UserControl 中,所以它与 ViewModel 的工作方式不同。我不知道为什么——可能是永远无法解开的谜团之一。但是通过将我的 RibbonControl 直接放在 MainWindow 上,一切都按预期工作 - 使用 DP 和 C# 属性。有趣的。(希望我能回到我生命中的那两天!)

谢谢,比尔

于 2009-06-06T12:34:53.643 回答
0

账单,

何时何地设置 DataContext?过去我遇到的问题是,当我在 InitializeComponent 之前设置 DataContext 时,我的 Bindings 从未正确执行。

另外,出于好奇:为什么在 ViewModel 中使用 DP 而不仅仅是属性?

于 2009-06-03T20:41:12.337 回答
0

尝试在绑定中使用 Path 标志指定 DP 的名称,如下所示:

<TextBlock x:Name="statusBar" Text="{Binding Path=VRAStatus}">
于 2009-06-03T17:49:11.560 回答
0

尝试指定 Binding 的 UpdateSourceTrigger 属性:

<StatusBar x:Name="sbar" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" 
           VerticalAlignment="Bottom" Background="LightBlue" Opacity="0.4" DockPanel.Dock="Bottom" >
        <StatusBarItem>
            <TextBlock x:Name="statusBar" Text="{Binding VRAStatus, UpdateSourceTrigger=PropertyChanged}" />
        </StatusBarItem>
        <StatusBarItem>
            <Separator Style="{StaticResource StatusBarSeparatorStyle}"/>
        </StatusBarItem>
    </StatusBar>
于 2010-04-06T16:52:01.447 回答