uwp-可见性转换器的布尔值不起作用

时间:2018-07-26 15:39:52

标签: mvvm uwp converter viewmodel uwp-xaml

我不明白为什么这么简单的事情会给我带来很多麻烦,但仍然如此。  我有这个转换器:

public class BoolToVisibleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value is bool && (bool)value)
            return Visibility.Visible;
        return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return (value is Visibility && (Visibility)value == Visibility.Visible);
    }
}

此视图模型:

 public class LoginViewModel: INotifyPropertyChanged
{
private bool isHowToVisibile;

    public bool IsHowToVisible
    {
        get { return isHowToVisibile; }
        set { isHowToVisibile = value; Notify(nameof(IsHowToVisible)); }
    }

 public event PropertyChangedEventHandler PropertyChanged;

    public void Notify(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
public void ShowHowTo()
    {
        IsHowToVisible = true;
    }
}

在xaml中,我有一个按钮可以激活ShowHowTo并将IsHowToVisible更改为true, 以及它的可见性绑定到视图模型属性IsHowToVisible的堆栈面板,看起来像这样:

<AppBarButton Label="How To Play" Icon="Help" Click="{x:Bind loginViewModel.ShowHowTo}"/>

<StackPanel Name="HowTo" Grid.ColumnSpan="3" Grid.RowSpan="6" Visibility="{x:Bind loginViewModel.IsHowToVisible,Converter={StaticResource boolToVis},Mode=OneWay}">

        <Button Name="CloseHowTo" Content="Close" Click="CloseHowTo_Click" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,10,10,10"/>
        <Image  Source="Assets/HowTo.jpg"  Stretch="Fill" Margin="10,10,10,10"/>

    </StackPanel>

xaml通过此了解转换器:

xmlns:con="using:MyApp.Converters"
<Page.Resources>
    <con:BoolToVisibleConverter x:Key="boolToVis"/>
</Page.Resources>

该按钮起作用。与调试器一起漫步表明,视图模型中的属性确实更改为true,并且触发了propertyChanged事件。就是这样。我在转换器中放置了一个断点,但它没有到达那里。

我尝试重建和部署,将模式更改为Mode = TwoWay,没有任何帮助。 我在做什么错了?

1 个答案:

答案 0 :(得分:6)

在我的测试中,您的上述代码运行良好,请确保当您专注于<con:BoolToVisibleConverter /> xaml时,可以转到“定义”(或F12)

反之,如果您的应用目标是Windows 10 1607版及更高版本,则可以删除BoolToVisibleConverter代码,而无需在xaml中使用Convert。自从Windows 10版本1607开始以来,XAML框架提供了一个内置的布尔值到可见性转换器。转换器将true映射到Visible枚举值,将false映射到Collapsed,因此您可以将Visibility属性绑定到Boolean,而无需创建转换器。请注意,这不是函数绑定的功能,仅是属性绑定。要使用内置转换器,您应用的最低目标SDK版本必须为14393或更高版本。当您的应用程序针对Windows 10的早期版本时,您将无法使用它。

如果仍然存在此问题,则可以创建一个最小的示例来重现它。

相关问题