Windows 8.1上的MVVM Visibility属性未更新

时间:2014-02-15 11:35:58

标签: c# wpf xaml mvvm windows-8.1

我有一个按钮,显示一个包含信息的网格和一个关闭该网格的按钮。 通过使visibility属性= Visible来显示网格的代码正在运行,但是折叠/隐藏网格的代码不起作用。

以下是示例XAML代码:

<Grid x:Name="gridSubmittedOrderDetails" HorizontalAlignment="Center" 
      VerticalAlignment="Center" MinWidth="500" MinHeight="200" 
      MaxWidth="600" Visibility="{Binding OrderDetailsVisibility}"/>

&#39;知名度&#39; viewmodel中的属性:

private Visibility orderDetailsVisibility;
public Visibility OrderDetailsVisibility
{
    get { return orderDetailsVisibility; }
    set
    {
        if (orderDetailsVisibility != value)
        {
             orderDetailsVisibility = value;
             Notify("OrderDetailsVisibility");
         }
     }
 }

显示网格的工作代码:

var context = (SubmittedOrdersViewModel)DataContext;
context.OrderDetailsVisibility = Visibility.Visible;

应该隐藏网格的代码,但不是:

var context = (SubmittedOrdersViewModel)DataContext;
context.OrderDetailsVisibility = Visibility.Collapsed;

无论谁能弄明白背后的神秘面纱,谢谢。 :)

1 个答案:

答案 0 :(得分:1)

代码看起来很好。可能您的viewmodel不在Grid的DataContext中。 简单的方法是在调试模式下启动应用程序并查看“输出”窗口并确认您的绑定工作正常。

输出窗口显示所有绑定失败。

或者,您也可以在OrderDetailsVisibility getter中放置一个断点,以查看它返回的值,并确认它已被您的网格使用。