【问题标题】:MVVM Visibility property on Windows 8.1 not updatingWindows 8.1 上的 MVVM 可见性属性未更新
【发布时间】:2014-02-15 20:08:38
【问题描述】:

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

这是示例 XAML 代码:

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

视图模型中的“可见性”属性:

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;

感谢谁能解开它背后的奥秘,谢谢。 :)

【问题讨论】:

  • 代码看起来不错。两个按钮是否都位于同一个父级下(即两者都具有相同的 DataContext)?您不是将 DataContext 明确分配给两个按钮吗?
  • 附带说明:不要将与 UI 相关的代码放入 ViewModel。 ViewModel 的目的是将 UI 相关的代码从您的业务逻辑/ViewModel 中分离出来。 Visibility 类是与 UI 相关的类,可能并非在所有 UI 框架中都可用(即,如果您制作控制台应用程序或 ASP.NET MVC 网站,您会怎么做?通常您会将其设为 bool 并使用像 @ 这样的转换器987654326@.

标签: c# wpf xaml mvvm windows-8.1


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您帮助我解决这个问题!确实如此(我只是没有在此处包含代码),实际上我已经在使它们可见的部分之前为 gridSubmittedOrderDetails (它只是页面的一部分)分配了一个不同的 DataContext,而实际上 Visibility 属性即将到来来自页面的单独 ViewModel 本身。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多