【发布时间】:2015-09-01 23:32:43
【问题描述】:
我正在开发一个 Windows Phone 8.1 项目,我目前在使用我的 BooleanToVisibility 转换器时遇到问题。
这是转换器本身:
public class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (!(value is bool))
return Visibility.Collapsed;
bool objValue = (bool)value;
if (objValue)
{
return Visibility.Visible;
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
这是我的 Xaml:
<Page
x:Class="CityBox.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="using:CityBox.Views"
xmlns:converters="using:CityBox.Converters"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
DataContext="{Binding Main, Source={StaticResource Locator}}"
x:Name="MyMainPage">
<Page.Resources>
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Page.Resources>
<Grid>
<views:DataLoadingView x:Name="DataLoadingView"
Visibility="{Binding LoadingViewVisibility, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<views:DrawerView x:Name="DrawerView"
Visibility="{Binding DrawerViewVisibility, Converter={StaticResource BooleanToVisibilityConverter}}" />
</Grid>
</Page>
最后是我的 ViewModel 中的布尔值:
private bool _loadingViewVisibility;
private bool _drawerViewVisibility;
public bool LoadingViewVisibility
{
get { return _loadingViewVisibility;}
set
{
_loadingViewVisibility = value;
RaisePropertyChanged("LoadingViewVisibility");
}
}
public bool DrawerViewVisibility
{
get { return _drawerViewVisibility; }
set
{
_drawerViewVisibility = value;
RaisePropertyChanged("DrawerViewVisibility");
}
}
我不明白的一件事,我认为问题可能来自于在资源中(在 xaml 中),我有某种警告告诉我“BooleanToVisibilityConverter”不在指定的命名空间中,即很奇怪,因为它是由 resharper 自动添加的。我认为这只是 VS 的错误,有时会发生,但是当我更改布尔值时它不起作用。
希望我足够精确,可以帮助您! 提前致谢, 纪尧姆。
编辑:我刚刚进行了一些测试,这里有一些有趣的东西:
<Grid>
<!--<TextBlock Text="Test1" Visibility="{Binding Test2, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBlock Text="Test2" Visibility="{Binding Test1, Converter={StaticResource BooleanToVisibilityConverter}}"/>-->
<views:LoadingView Visibility="{Binding Test2, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<views:DrawerView Visibility="{Binding Test1, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</Grid>
如果我取消注释两个文本块并注释我的两个视图,那么它就可以工作。 如果我这样做,它不会。在每个视图中简单地放置一个文本块,上面写着“正在加载”和“抽屉”。在我取消注释两个视图并尝试通过将布尔设置为 false 来隐藏一个的情况下,这两个视图在屏幕上可见。如果我用两个文本框来做这件事就不会发生!
【问题讨论】:
-
将转换器更改为转换器
-
即使更改后我仍然有同样的错误
标签: c# wpf xaml mvvm windows-phone-8.1