MVVM按钮可见性(MVVM Button Visibility)

系统教程 行业动态 更新时间:2024-06-14 16:57:18
MVVM按钮可见性(MVVM Button Visibility)

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

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>

视图模型:

项目用户可以选择:

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中的值

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"; } }

I have a button that is set to Hidden in my ViewModel constructor. When the user clicks on an item the button should become visible. My break points and messagebox show that the value of the Visibility is being change to "Visible" So I'm not sure what I am missing in my binding.

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>

ViewModel:

Items User can select:

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(); } }

Value to Bind Visibility To in XAML

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

Method that is called when user selects row

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

Edit: Adding Constructor My Constructor:

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")方法永远不会被调用以指示视图需要更改。

相反,你的代码应该是:

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)); } }

You are setting the value of btn_update_visibility field directly instead of via the Btn_Update_Visibility property. This means the OnPropertyChanged("Btn_Update_Visibility") method never gets called to indicate the view needs to change.

Instead your code should be:

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

Partially related though is your naming of variables and methods. Common C# convention, which would clarify your code somewhat would have it a little more like this (with some other styling improvements too):

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

更多推荐

本文发布于:2023-04-12 20:58:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/dzcp/7798d2d0165f5fb9d6286852c460a365.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:按钮   见性   MVVM   Button   Visibility

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!