【发布时间】: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