我有几个标签。我需要多次设置可见性为真或假。以防万一,我的代码正在复制如何使用mvvm克服这个问题
userlabel.IsVisible = false;
passwordlabel.IsVisible = false;
userlabel1.IsVisible = true;
passwordlabel1.IsVisible = true;
在我的代码中,该代码多次重复执行。我需要将其放入我的视图模型CS中的方法中
答案 0 :(得分:0)
我认为您可以在ViewModel类中设置属性的值并将其绑定到视图。在示例中,为清楚起见,我使用的是一个基本ViewModel,它将引发NotifyPropertyChanged事件。
public class MainViewModel : ViewModelBase
{
private bool _isUserLabelVisible = false;
public bool IsUserLabelVisible
{
get
{
return _isUserLabelVisible;
}
set
{
Set(ref _isUserLabelVisible, value);
}
}
private bool _isPasswordVisible = true;
public bool IsPasswordLabelVisible
{
get
{
return _isPasswordVisible;
}
set
{
Set(ref _isPasswordVisible, value);
}
}
private void DisableAll()
{
IsPasswordLabelVisible = false;
IsUserLabelVisible = false;
}
private void EnableAll()
{
IsUserLabelVisible = true;
IsPasswordLabelVisible = true;
}
}
这样,您可以创建您的方法,并且视图将被更新。 在您的视图中,您将需要使用BooleanToVisibilityConverter。
<Window x:Class="StackOverflow54741515.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ignore="http://www.galasoft.ch/ignore"
mc:Ignorable="d ignore"
Height="300"
Width="300"
Title="MVVM Light Application"
DataContext="{Binding Main, Source={StaticResource Locator}}">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVis"/>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<TextBlock Name="userLabel" FontSize="36"
FontWeight="Bold"
Foreground="Purple"
Text="Username"
VerticalAlignment="Center"
HorizontalAlignment="Center"
TextWrapping="Wrap"
Visibility="{Binding IsUserLabelVisible, Converter={StaticResource BoolToVis}}"/>
<TextBlock Name="passwordLabel" FontSize="36"
FontWeight="Bold"
Foreground="Purple"
Text="Password"
VerticalAlignment="Center"
HorizontalAlignment="Center"
TextWrapping="Wrap"
Visibility="{Binding IsPasswordLabelVisible, Converter={StaticResource BoolToVis}}"/>
</Grid>
</Window>
希望对您有所帮助。