如何在WPF+MVVM中正确地给予用户反馈?(登录表单)

本文关键字:用户反馈 登录 表单 WPF+MVVM 正确地 | 更新日期: 2023-09-27 17:59:17

让我在前面说,我目前正在学习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>

如何在WPF+MVVM中正确地给予用户反馈?(登录表单)

MVVM中没有关于代码隐藏中不包含任何代码的规则-您只是不希望代码隐藏中包含BUSINESS LOGIC。这是许多MVVM新手没有完全意识到的,它会引起很多头痛。您可以在代码后面放入尽可能多的视图逻辑,以处理反馈MessageBoxes等

现在,当你想给出特定的反馈时,你通常会做一些事情,比如让视图在视图模型中执行一个返回布尔值的函数,如果它返回false,那么显示一个消息框,其中包含视图模型中具有特定错误数据的属性的内容。人们喜欢用几种不同的方式来处理这些事情。

永远记住,MVVM不是一种宗教,它是一种可以使用的工具,如果你想做的话,你可以在适合你的地方弯曲它——你可以决定什么是太多的分层。