我有一个按钮在我的 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/