我试图制作一个基于WPF的程序,该程序将从用户控件读取文本框输入(用户输入)并将其另存为object
。该用户控件已添加到MainWindow
中。在MainWindow
中,您有一个按钮,该按钮显示带有文本框值的消息框。我不确定如何连接所有内容。
错误= CS0103当前名称'minJpValue'不存在 上下文WpfApp1
请帮助
(用户控件.xaml代码)
<TextBox x:Name="minJpValue"/>
(自定义类)
public class jpData
{
public double minJpValue
{
get { return minJpValue; }
set { minJpValue = value; }
}
}
(MainWindow .cs代码)
private void clickclick(object sender, RoutedEventArgs e)
{
MessageBox.Show(minJpValue);
}
答案 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);
}
这可以解决您当前的问题。请查看其是否按预期工作。