1

我有以下观点

在此处输入图像描述

当 TextBox2 获得焦点时,我必须检查 TextBox1 是否为空。如果文本框一个是空的,我必须用消息框提示一条消息。

4

3 回答 3

1

为处理GotFocus事件TextBox2,找到TextBox1.Text属性的绑定表达式,然后调用BindingExpression.UpdateSource

请注意,如果您想防止默认验证行为(失去焦点时) ,您应该设置UpdateSourceTrigger="Explicit"为。TextBox1.TextTextBox1

升级版

代码示例(带有数据错误验证)。视图模型:

public class ViewModel : INotifyPropertyChanged, IDataErrorInfo
{
    // INPC implementation is omitted

    public string Text1
    {
        get { return text1; }
        set
        {
            if (text1 != value)
            {
                text1 = value;
                OnPropertyChanged("Text1");
            }
        }
    }
    private string text1;


    public string Text2
    {
        get { return text2; }
        set
        {
            if (text2 != value)
            {
                text2 = value;
                OnPropertyChanged("Text2");
            }
        }
    }
    private string text2;

    #region IDataErrorInfo Members

    public string Error
    {
        get { return null; }
    }

    public string this[string columnName]
    {
        get 
        {
            if (columnName == "Text1" && string.IsNullOrEmpty(Text1))
                return "Text1 cannot be empty.";

            return null;
        }
    }

    #endregion
}

风景:

<Window x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <TextBox Grid.Row="0" Margin="5" Name="Text1" Text="{Binding Text1, ValidatesOnDataErrors=True, UpdateSourceTrigger=Explicit}"/>
        <TextBox Grid.Row="1" Margin="5" Text="{Binding Text2, ValidatesOnDataErrors=True}" GotFocus="TextBox_GotFocus" />
    </Grid>
</Window>

代码隐藏:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }

    private void TextBox_GotFocus(object sender, RoutedEventArgs e)
    {
        var bindingExpression = Text1.GetBindingExpression(TextBox.TextProperty);
        bindingExpression.UpdateSource();
    }
}
于 2013-04-03T08:30:23.783 回答
1

ViewModel 应该为其属性提供一些验证错误。见System.ComponentModel.IDataErrorInfo。在 MVVM 中,如果视图依赖于它的视图模型是没有问题的。CodeBehind 中的代码本身并不坏,它应该是经过深思熟虑的。

于 2013-04-03T08:50:01.993 回答
0

您可以将命令连接到事件以对 WPF MVVM 实现的应用程序执行此操作。检查此链接man 以供参考。祝你好运!

于 2013-04-03T08:35:43.890 回答