是否可以在面向Windows Phone 8和.NET for Windows Store的可移植类库中使用System.Windows.Visibility?

时间:2013-11-20 04:26:09

标签: c# windows-phone-8 mvvm

我正在编写一个使用MVVM模式的Windows Phone 8应用程序,我正在尝试做一些简单的事情,比如将我的ViewModel放入可移植类库(PCL)中,以便我可以在事件中重用ViewModel我写了一个平板电脑或PC版的应用程序。

那就是说,我试图将我的一些控件的“Visibility”属性绑定到一个viewmodel属性,就像这样......

using System.Windows;

public class MyViewModel
{

private bool shouldShowButton1;

public Visibility Button1_Visibility
{
   get
   {
     return shouldShowButton1 ? Visibility.Visible : Visibility.Collapsed;
   }
}
}

瞧,我受到以下错误的欢迎:

"The name 'Visibility' does not exist in the current context."

有没有办法打败这个?

1 个答案:

答案 0 :(得分:2)

不。此外,无论如何,这不应该存在于您的VM中。

只需在视图模型中有一个状态的布尔指示符(注意,我说状态而不是指示按钮应该可见):

public bool ShoppingCartIsValid { get { /*snip*/ } set { /*INotifyPropertyChanged*/ }

在您的用户界面中,您可以使用BooleanToVisibilityConverter将按钮的可见性绑定到此属性,以将bool转换为Visibility

<Window.Resources>
  <BooleanToVisibilityConverter
         x:Key="btvc"  />
</Window.Resources>

或者您的UI的根目录在您的特定应用中,然后

<Button Visibility="{Binding ShoppingCartIsValid, 
                          Converter={StaticResource btvc}}" />

现在,我不确定这个类型是存在于WP8 API中还是存在于Windows应用程序中(我还没有制作任何应用程序),但如果不是,使用{{创建这样的转换器简直是微不足道的3}}界面。例子可以在这里找到。