Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF按钮可见性_Wpf_Data Binding - Fatal编程技术网

WPF按钮可见性

WPF按钮可见性,wpf,data-binding,Wpf,Data Binding,我正在使用MVVM架构开发WPF应用程序 到目前为止一切都很顺利 我遇到了绑定可见性的问题。如果可以的话,我想尽量减少在代码背后编写代码,但是如果需要的话,我不介意这样做 我有一个模型。此模型公开一个布尔值和两个命令。一个connect命令、一个disconnect命令和一个DeviceCurrentlyConnected Bool 基本上,我已经决定制作2个按钮,但是按钮的可见性基于布尔值 所以我很难接受这个。我用触发器尝试了很长一段时间 <Button Visibility="Hidd

我正在使用MVVM架构开发WPF应用程序

到目前为止一切都很顺利

我遇到了绑定可见性的问题。如果可以的话,我想尽量减少在代码背后编写代码,但是如果需要的话,我不介意这样做

我有一个模型。此模型公开一个布尔值和两个命令。一个connect命令、一个disconnect命令和一个DeviceCurrentlyConnected Bool

基本上,我已经决定制作2个按钮,但是按钮的可见性基于布尔值

所以我很难接受这个。我用触发器尝试了很长一段时间

<Button Visibility="Hidden" Content="{x:Static UIStrings:ClientStrings.DeviceBar_DisconnectCommandName}" VerticalAlignment="Center" HorizontalAlignment="Center" Height="{Binding ElementName=this.Content, Path=DesiredHeight}" Margin="10" Name="Disconnect" Command="{Binding DisconnectCurrentDeviceCommand}">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding DataCotext.DeviceConnected, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" Value="True">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

我一点也不能让风格发挥作用

基本上,我想要的功能是:

DeviceConnected=false: 显示一个按钮,其中内容连接和命令绑定到ConnectCommand

DeviceConnected=true: 显示一个按钮,其中内容disconnect和命令绑定到DisconnectCommand


当当前未连接任何设备时,显示并绑定到连接设备的按钮;当连接设备时,显示绑定到断开连接命令的按钮,并说断开连接。

编写一个bool到可见性转换器,然后在按钮上使用转换器。这是一篇关于创建/使用可见性转换器的好文章


我过去所做的是使用bool-to-visibility转换器,并将按钮的IsEnabled属性作为参数传递给转换器。由于按钮由模型中的命令使用CanExecute方法禁用,因此您可以使用IsEnabled属性通过转换器设置按钮的可见性。

触发器不起作用的原因是样式被按钮本身的属性覆盖

您可以按照Metro Smurf的建议使用转换器,也可以将可见性属性移动到样式中,以便触发器正常工作

只需添加:

<Style.Setters>
    <Setter Property="Visibility" Value="Hidden" />
</Style.Setters>


添加到样式,然后删除该属性。

绑定是要
{Binding DataCotext.DeviceConnected…}
还是键入错误?i、 例如,不是
{Binding DataContext.DeviceConnected…}
。您的权利。它应该是DataContext。但我的实际代码是正确的:P。