UWP -更改按钮.来自另一个类的可见性

本文关键字:另一个 可见性 按钮 UWP | 更新日期: 2023-09-27 18:02:42

我正试图从另一个类更改多个按钮可见性。这应该很容易,但我就是不明白。

xaml部分很简单:

<button x:Name="whatever" Visibility="{Binding whateverName}"

视图模型可以是这样的?

private Visibility vis;
    public Visibility Vis
    {
        get { return vis; }
        set { vis = value; }
    }

但是如果是这样,我怎么传递我的按钮名呢?

更进一步,一个服务文件试图修改可见性值。

UWP -更改按钮.来自另一个类的可见性

由于使用的是Bindings,所以不需要按钮名称标识符。连接是在XAML:

的Binding部分进行的。
<Button x:Name="whatever" Visibility="{Binding whateverName}"/>

正在发生的事情是,你说whatever按钮的可见性属性将被绑定到视图模型中的whateverName属性值。所以你的视图模型需要看起来像这样:

private Visibility vis;
public Visibility whateverName
{
    get { return vis; }
    set { vis = value; }
}

要改变按钮的可见性,你需要改变视图模型中whateverName的值。然而,如果你尝试一下,你会发现这是行不通的。原因是为了使更改对按钮生效,视图模型必须通知视图其属性已经更改。这是通过INotifyPropertyChanged接口完成的。

所以你的视图模型需要看起来像这样:

public class Viewmodel : INotifyPropertyChanged
{
    private Visibility vis;
    public Visibility whateverName
    {
        get { return vis; }
        set
        {
            vis = value;
            OnPropertyChanged("whateverName");
        }
    }
    public void OnPropertyChanged(string pName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(pName));
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

在PropertyChanged事件中,您必须传递要通知的属性名称。在我的例子中,我只是使用了一个与属性名称匹配的字符串值,但是有各种技术可以消除这个"魔法字符串"。

这里有一个问题有很好的答案。