我正在编写一个使用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."
有没有办法打败这个?
答案 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}}界面。例子可以在这里找到。