Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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
C# 按钮中的DataTrigger绑定未反映在值更改上_C#_Wpf_Data Binding_Datatrigger - Fatal编程技术网

C# 按钮中的DataTrigger绑定未反映在值更改上

C# 按钮中的DataTrigger绑定未反映在值更改上,c#,wpf,data-binding,datatrigger,C#,Wpf,Data Binding,Datatrigger,我有一个按钮,其可见性将根据绑定值而改变。这是我的密码 <Button Content="Click Me" Grid.Column="1" Click="Button_Click" Width="100" Height="100"> <Button.Style> <Style TargetType="Button"> <Setter Prop

我有一个按钮,其可见性将根据绑定值而改变。这是我的密码

        <Button Content="Click Me" Grid.Column="1" Click="Button_Click" Width="100" Height="100">
            <Button.Style>
                <Style TargetType="Button">
                    <Setter Property="Visibility" Value="Visible"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=isShow, Mode=TwoWay}" Value="True">
                            <Setter Property="Visibility" Value="Hidden"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=isShow, Mode=TwoWay}" Value="False">
                            <Setter Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
我是C#的初学者,已经习惯了数据绑定。请告诉我哪里出了问题。

您应该从
isShow
属性的设置器中实现并引发
属性更改
事件,以便在源属性动态设置为新值时刷新
可见性

public class MainWindow : Window, INotifyPropertyChanged
{
    ...

    private bool _isShow;
    public bool isShow
    {
        get { return _isShow; }
        set { _isShow = value; NotifyPropertyChanged(); }
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        this.isShow = !this.isShow;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
您还可以删除其中一个触发器:

<Button Content="Click Me" Grid.Column="1" Click="Button_Click" Width="100" Height="100">
    <Button.Style>
        <Style TargetType="Button">
            <Setter Property="Visibility" Value="Visible"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=isShow, Mode=TwoWay}" Value="True">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

<Button Content="Click Me" Grid.Column="1" Click="Button_Click" Width="100" Height="100">
    <Button.Style>
        <Style TargetType="Button">
            <Setter Property="Visibility" Value="Visible"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=isShow, Mode=TwoWay}" Value="True">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>