Как сохранить значение текстового поля WPF в переменной - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь создать программу на основе WPF, которая будет считывать ввод текста (пользовательский ввод) из пользовательского элемента управления и сохранять его как object свойство.Пользовательский контроль добавляется к MainWindow.Начиная с MainWindow, у вас есть кнопка, которая отображает окно сообщения со значением текстового поля.Я не уверен, как все это подключить.

Error = CS0103 Имя minJpValue не существует в текущем контексте WpfApp1

Пожалуйста, помогите

  1. (код пользователя .xaml)

    <TextBox x:Name="minJpValue"/>
    
  2. (пользовательский класс)

    public class jpData 
    {
        public double minJpValue
        {
            get { return minJpValue; }
            set { minJpValue = value; }
        }
    }
    
  3. (Код MainWindow .cs)

    private void clickclick(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(minJpValue);
    }
    

Ответы [ 3 ]

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

Хорошо, давайте поймем, что вы сделали неправильно.

<TextBox Name="minJpValue"/>

Эта строка создаст объект для TextBox, и объект будет называться с вашим именем minJpValue как вы упомянули, это будет внутри другого Usercontrol объекта, и вы попытаетесь minJpValue в MainWindow как он узнает, что что-то вроде minJpValue существует

Итак, вот ответ:

objjpData.minJpValue = minJpValue.Text;//Inside user control when ever u change the `minJpValue` u need to set it too bjjpData.minJpValue

передать это objjpData в главное окно или туда, куда вы хотите войти,

MessageBox.Show(objjpData.minJpValue);

Вариант 2: MessageBox.Show (UserControlObject.minJpValue.Text);

И PS: проверьте MVVM один раз

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

Проблема может быть легко решена с помощью шаблонов MVVM. Код для usercontrol будет похож на этот

<Grid Background="Red">
    <TextBox x:Name="minJpValue" Text="{Binding Path=minJpValue}" />
</Grid>

Создайте новую ViewModel для MainWindow следующим образом

public class MainWindowViewModel : INotifyPropertyChanged
{
    /// <summary>
    /// Property Changed Event Handler
    /// </summary>
    public event PropertyChangedEventHandler PropertyChanged;

    // Create the OnPropertyChanged method to raise the event
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
   private String _minJpValue;
    public String minJpValue {
        get { return _minJpValue; }
        set {
            _minJpValue = value;
            OnPropertyChanged(nameof(minJpValue));
        }
    }

}

Добавьте usercontrol в ваше представление MainWindow и в коде позади установите текстовый код данных для ViewModel следующим образом

 public MainWindowViewModel CurrentModel = new MainWindowViewModel();

    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = CurrentModel;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(CurrentModel.minJpValue);
    }

Это может решить вашу текущую проблему.Пожалуйста, убедитесь, что он работает в соответствии с ожиданиями.

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

Для этого быстрого исправления используйте:

 MessageBox.Show(minJpValue.Text);

Но лучшим способом было бы сохранить значение в VM (View Model) и привязать к нему элемент управления, используя шаблон MVVM. Я приведу базовый пример на

Xaml: стратегия создания и загрузки главной страницы ViewModel для упрощения привязки

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