gpt4 book ai didi

c# - 在 WPF 中填写所有字段之前,表单验证禁用提交按钮

转载 作者:太空狗 更新时间:2023-10-30 00:35:27 25 4
gpt4 key购买 nike

鉴于:WPF 4.0 基于桌面的应用程序。带有两个 TextBox 字段和提交按钮的基本输入表单。

XAML 代码:

<Label Content="Username" />
<TextBox x:Name="Form_UserName" />

<Label Content="Password" />
<TextBox x:Name="Form_Password" />

<Button x:Name="Submit"
Click="Form_Submit_Button_Click"
Content="Submit" />

任务:实现当且仅当两个 TextBox 字段被填充时启用提交按钮的逻辑。

解决这个问题的经典方法是使用事件处理程序,例如 onLostFocus() 或类似的东西,我们可以在每次用户从该字段切换焦点时控制该字段的条件.

但由于我的项目是基于 WPF 的,所以我更喜欢使用 native 方式处理表单 — 数据绑定(bind)机制。我也从这个站点和 MSDN 上阅读了一些关于表单验证的文章,但在几乎所有示例中都建议使用 MVVM 框架,我想在没有任何框架的情况下实现它。

此外,我尝试使用 IMultiValueConverter 但没有收到有效结果。

如何尽可能简单地解决数据绑定(bind)问题(我只是从 WPF 开始)?

最佳答案

这可以使用 WPF 验证机制轻松完成。首先,因为您想遵循 WPF 架构,我建议您使用 WPF Command model .

现在要实现您的功能,您可以将 CommandBinding 添加到 Window/UserControl 或 Button 本身:

<Button Content="Save" Command="Save">

<Button.CommandBindings>
<CommandBinding Command="Save"
Executed="Save_Executed" CanExecute="Save_CanExecute" />
</Button.CommandBindings>
</Button>

现在您可以订阅 CanExecute 事件以根据您的验证逻辑启用或禁用您的按钮。在您继续之前,我建议您阅读这些内容:

Validation in Windows Presentation Foundation

Using Custom Validation Rules in WPF

满足您的要求的最简单方法如下:

XAML

<Window x:Class="GridScroll.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:GridScroll"
Title="Window1" Height="300" Width="300">

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>

<TextBlock Text="User Name" Grid.Column="0" Grid.Row="0"/>
<TextBox Grid.Column="1" Grid.Row="0" Text="{Binding Path=UserName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Text="Password" Grid.Column="0" Grid.Row="1"/>
<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding Path=Password,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

<Button Content="Save" Grid.Row="2" Grid.ColumnSpan="2" Width="100" HorizontalAlignment="Right" Command="Save">
<Button.CommandBindings>
<CommandBinding Command="Save"
Executed="Save_Executed" CanExecute="Save_CanExecute"/>
</Button.CommandBindings>

</Button>
</Grid>

代码隐藏

public partial class Window1 : Window,INotifyPropertyChanged
{
public Window1()
{
InitializeComponent();
DataContext = this;
}

private string userName;
public string Username
{
get
{
return userName;
}
set
{
userName = value;
OnPropertyChanged("UserName");
}
}

private string password;
public string Password
{
get
{
return password;
}
set
{
password = value;
OnPropertyChanged("Password");
}
}

public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}

private void Save_Executed(object sender, ExecutedRoutedEventArgs e)
{
//Your code
}

private void Save_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = !(string.IsNullOrEmpty(Username) && string.IsNullOrEmpty(Password));

}
}

希望这对您有所帮助。

关于c# - 在 WPF 中填写所有字段之前,表单验证禁用提交按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4635716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com