Проверьте ввод UserControl в окне WPF - PullRequest
0 голосов
/ 02 июля 2019

В настоящее время у меня есть UserControl в окне.UserControl состоит из двух текстовых полей.UserControl - это элемент моего MainWindow.Вне моего UserControl находится кнопка «Отправить» в моем окне.Я хотел бы включать и отключать кнопку всякий раз, когда текстовое содержимое полей не является нулевым или нулевым.

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 (я планирую, чтобы различные пользовательские элементы управления были доступны для отображения в окне).

MainWindowXAML:

<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 из MainWindow как мойview находится в MainWindow, однако его содержимое для меня недоступно, и нет смысла иметь представление в UserControl.Как мне решить эту проблему?

1 Ответ

0 голосов
/ 02 июля 2019

Я создал похожий проект. Главным образом, чтобы сделать это, проверьте через ваш код 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";
            }
        }

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...