首页 文章

如何在WPF MVVM中正确提供用户反馈? (登录表格)

提问于
浏览
-2

让我先说一下,我正在学习WPF和MVVM模式,所以我的问题可能是自我回答更有经验的开发人员 .

我所拥有的是一个简单的登录表单,其中包含名称的Textbox和密码的PasswordBox . 名称框绑定到模型,而密码框作为整个对象发送到命令(因为您无法绑定到其文本属性) . 然后是一个执行登录命令的按钮 . 现在当登录工作正常时,我的问题是如何在不破坏mvvm模式的情况下发送命令失败的返回反馈 . 例如,将字段的边框颜色更改为红色 .

我最初的直觉是拥有模型的属性,我将在失败时进行更改 . 但是我想学习正确的方法,而不是自己破解解决方案(击败整个事物的目的) .

额外问题: - 您可以将属性绑定到语句 - 例如String.isNullOrEmpty(model.name)? - 我是否应该完全放弃MVVM模式进行这样一个简单的操作(而项目的其余部分仍然会使用它)> - 有什么好的资源可以学习WPF和MVVM?

下面的表格代码:

<Controls:MetroWindow x:Class="Interface_WPF.View.LoginWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
    Title="Enter" Height="140" Width="285" WindowStartupLocation="CenterScreen" WindowStyle="None" AllowsTransparency="True" ResizeMode="NoResize">
<StackPanel>
    <Grid FocusManager.FocusedElement="{Binding ElementName=NameBox}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="200" />
        </Grid.ColumnDefinitions>
        <Label Grid.Row="0" Grid.Column="0" Content="Name:"/>
        <Label Grid.Row="1" Grid.Column="0" Content="Password:"/>
        <TextBox Grid.Column="1" Grid.Row="0" Margin="3"
                 Name="NameBox" Text="{Binding Login.Name, UpdateSourceTrigger=PropertyChanged}"/>
        <PasswordBox Grid.Column="1" Grid.Row="1" Margin="3"
                 Name="PasswordBox"/>
    </Grid>
    <Button Command="{Binding LoginCheck}" 
            CommandParameter="{Binding ElementName=PasswordBox}" 
            Style="{DynamicResource SquareButtonStyle}" IsDefault="True" Width="100" HorizontalAlignment="Right" Margin="0,8,7.8,8" Content="Enter"/>
</StackPanel>

1 回答

  • 1

    MVVM中没有关于代码隐藏中没有任何代码的规则 - 您只是不想在代码隐藏中使用BUSINESS LOGIC . MVVM的许多新手都没有意识到这一点,并且引起了许多令人头疼的问题 . 您可以在代码隐藏中添加尽可能多的视图逻辑,因为您希望处理诸如反馈消息框等内容 .

    现在,当你想提供特定的反馈时,你通常会做一些事情,比如让视图在viewmodel中执行一个返回布尔值的函数,如果它返回false,则在viewmodel中显示一个带有特定错误数据的属性内容的消息框 . 人们喜欢处理这些事情的方式有几种 .

    永远记住MVVM不是一种宗教信仰,它是一种可以使用的工具,你可以在适合你的地方弯曲它,如果这就是你想做的事情 - 你决定什么是太多的图层破坏 .

相关问题