c# - MVVM 按钮可见性

标签 c# wpf xaml mvvm

我有一个按钮在我的 ViewModel 构造函数中设置为隐藏。当用户点击一个项目时,按钮应该变得可见。我的断点和消息框显示可见性的值正在更改为“可见”,所以我不确定我的绑定(bind)中缺少什么。

XAML:

    <Button  
        Grid.Column="0"
        Grid.Row="2"
        HorizontalAlignment="Left" 
        Margin="105,22,0,21" 
        Style="{StaticResource MetroButton}" 
        Width="90" 
        Height="57" 
        Click="btn_Update_Click" 
        RenderTransformOrigin="0.49,0.287"
        Visibility="{Binding Btn_Update_Visibility, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
        <TextBlock Text="Update Request" TextWrapping="Wrap" TextAlignment="Center"/>
    </Button>

View 模型:

用户可以选择的项目:

private DataRowView select_request;
public DataRowView Select_Request
{
    get { return select_request; }
    set
    {
        select_request = value;
        OnPropertyChanged("Select_Request");

        //Get the Check Request ID
        OnSelect_RequestChange();

        //Make Update Button Visible
        OnSelect_Row();
    }
}

在 XAML 中绑定(bind)可见性的值

private string btn_update_visiblity;
public string Btn_Update_Visibility
{
    get { return btn_update_visiblity; }
    set
    {
        btn_update_visiblity = value;
        OnPropertyChanged("Btn_Update_Visibility");
    }
}

用户选择行时调用的方法

public void OnSelect_Row()
{
    btn_update_visiblity = "Visible";
    MessageBox.Show("Update Button is " + Btn_Update_Visibility.ToString());
}

编辑:添加构造函数 我的构造函数:

    public LandingPageMVVM()
    {
        Search_User = MyCommonValues.UserName;

        btn_update_visiblity = "Hidden";
        //Check if Manager
        #region Manager Check

        bool? manager_check = MyCommonValues.manager_check;
        if (manager_check == true)
        {
            MessageBox.Show("Welcome Manager");
            btn_review_visibility = "Visible";
        }
        else
        {
            MessageBox.Show("Welcome User");
            btn_review_visibility = "Hidden";
        }
     }

最佳答案

您正在直接设置 btn_update_visibility 字段的值,而不是通过 Btn_Update_Visibility 属性。这意味着永远不会调用 OnPropertyChanged("Btn_Update_Visibility") 方法来指示 View 需要更改。

您的代码应该是:

public void OnSelect_Row()
{
    Btn_Update_Visibility = "Visible";
    MessageBox.Show("Update Button is " + Btn_Update_Visibility.ToString());
}

部分相关的是您对变量和方法的命名。常见的 C# 约定,它会在某种程度上阐明您的代码,它会更像这样(还有一些其他样式改进):

private string _buttonUpdateVisibility;

public string ButtonUpdateVisibility
{
    get => _buttonUpdateVisibility;
    set
    {
        _buttonUpdateVisibility= value;
        OnPropertyChanged(nameof(ButtonUpdateVisibility));
    }
}

关于c# - MVVM 按钮可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908938/

相关文章:

.net - WPF中的水平MenuItem

c# - 绑定(bind)到两个值

c# - 具有重新分析点的 FolderBrowserDialog SelectedPath

c# - 我应该构建 Windows 服务以便按计划运行我的 C# 代码吗?

c# - DbEntityValidationException - 我如何轻松判断导致错误的原因?

c# - 如何设置网格背景

WPF:XAML 属性声明不是通过 Setter 设置的?

C# 动态窗体帮助

c# - 使用 linq 的 WPF 组合框绑定(bind)

c# - 将 WPF DataGrid 控件数据绑定(bind)到 System.Data.DataTable 对象?