如何将WPF文本框值保存到变量

时间:2019-07-09 12:24:30

标签: c# wpf

我试图制作一个基于WPF的程序,该程序将从用户控件读取文本框输入(用户输入)并将其另存为object。该用户控件已添加到MainWindow中。在MainWindow中,您有一个按钮,该按钮显示带有文本框值的消息框。我不确定如何连接所有内容。

  

错误= 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 :(得分:0)

使用此快速修复方法:

 MessageBox.Show(minJpValue.Text);

但是更好的方法是将值存储在VM(视图模型)上,并使用MVVM模式将控件绑定到该值。我在

上提供了一个基本示例

Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding

答案 1 :(得分:0)

好吧,让我们了解wt您做错了什么。

<TextBox Name="minJpValue"/>

此行将为TextBox创建一个对象,并且该对象将使用您的名字进行引用 正如您提到的minJpValue将会在另一个Usercontrol对象中,您尝试在minJpValue中的MainWindow中怎么知道minJpValue这样的东西存在< / p>

所以这是答案:

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

答案 2 :(得分:0)

可以使用MVVM模式轻松解决此问题, 用户控件的代码将与此类似

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

如下所示为MainWindow创建新的ViewModel

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));
        }
    }

}

将用户控件添加到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);
    }

这可以解决您当前的问题。请查看其是否按预期工作。