在Window WPF中验证UserControl的输入

时间:2019-07-02 13:43:19

标签: c# wpf xaml user-controls

当前,我在窗口中包含一个UserControlUserControl由两个文本框组成。 UserControl是我的MainWindow中的一个元素。我的UserControl范围之外是我的窗口中的“提交”按钮。每当框的文本内容不为null或null时,我都希望启用和禁用该按钮。

UserControl XAML代码:

<UserControl x:Class="myClass.myUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d">
    <StackPanel Background="White">
        <DockPanel>
            <Label x:Name="lbl1" Content="First Box:"/>
            <TextBox x:Name="txtbox1"/>
            <Label x:Name="lbl1" Content="Second Box:"/>
            <TextBox x:Name="txtbox2"/>
        </DockPanel>
    </StackPanel>
</UserControl>

查看模型:

using System;

namespace myClass {

    partial class UserControlViewModel: ViewModelBase {

        private bool _validInput;

        public UserControlViewModel() {
            validInput = false;
        }

        public object validInput {
            get { return _validInput; }
            set {
            _validInput = value;
            OnPropertyChanged("validInput");
            }
        }
    }

ViewModelBase:

using System.ComponentModel;

namespace myClass {
    class ViewModelBase : INotifyPropertyChanged {
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string propertyName) {
            var handler = PropertyChanged;
            if (handler != null) {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

我的问题在于如何处理此验证,我的按钮的isEnabled属性当前绑定到视图模型的validInput布尔值。但是,用户控件的内容无法在我的窗口中访问,因为我已经将其抽象为一个单独的userControl项(我计划在窗口中显示不同的用户控件)。

MainWindow XAML:

<Window x:Class="myClass.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:uc="clr-namespace:myClass"
        Title="MainWindow" Height="356" Width="699" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">

    <Window.DataContext>
        <uc:UserControlViewModel/>
    </Window.DataContext>

    <Grid>
        <UserControl x:Name="usrControl"/>

        <Button x:Name="btn" Content="Create" Click="btn_Click" IsEnabled = "{Binding validInput}"/>

    </Grid>

</Window>

MainWindow C#:

using System;
using System.Windows;
using System.Windows.Controls;

namespace myClass {

    public partial class MainWindow: Window {

        UserControlViewModel view;

        public MainWindow() {
            InitializeComponent();
            view = new UserControlViewModel();
            DataContext = view;
        } 
}

我需要能够像我在UserControl中一样查看MainWindowMainWindowUserControl中文本框的内容,但是我和我都无法访问这些内容在<p>中放置视图是没有意义的。我应该如何解决这个问题?

1 个答案:

答案 0 :(得分:-1)

我创建了一个类似的项目。为此,请通过您的C#代码进行验证。基本上

(我不记得输入.content或.text来获取值)

if(txtbox1.Content == ---or--- (textbox1.Content).Equals(Whatever)){

   ----code---

}

else{
    MessageBox.Show("Error")
}

不是“禁用”按钮(我认为您不能这样做),而是使其变得无效,用户知道或只是不做任何事情。

不相关:如果您想要某个输入而不是空白的文本框输入,那么如果用户留空,则可以使用此代码作为基础

private void txtbox1_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            if (txtbox1.Text.Equals("your origional text"))
            {
                Name_Text.Text = "";
            }
        }

private void txtbox1_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            if (Name_Text.Text.Equals(""))
            {
                Name_Text.Text = "your origional text";
            }
        }

希望这会有所帮助