C# 将文本框绑定到WPF中对象的属性
我知道你会说这个问题是重复的,但我还没有找到任何有效的解决办法。 因此,一个简单的场景是: 我有一个文本框和一个按钮:C# 将文本框绑定到WPF中对象的属性,c#,wpf,binding,C#,Wpf,Binding,我知道你会说这个问题是重复的,但我还没有找到任何有效的解决办法。 因此,一个简单的场景是: 我有一个文本框和一个按钮: <TextBox x:Name="textbox" Text="{Binding st.SomeText}"> <Button Click="Button_Click">Push</Button> 我在MainWindow类中有一个对象: public partial class MainWindow : Window { Some
<TextBox x:Name="textbox" Text="{Binding st.SomeText}">
<Button Click="Button_Click">Push</Button>
我在MainWindow类中有一个对象:
public partial class MainWindow : Window
{
Something st;
public MainWindow()
{
InitializeComponent();
st = new Something();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(st.SomeText);
}
}
所以我想在文本框中键入一些内容,按下按钮,得到一条包含文本框文本的消息,但我一直收到空消息。
我应该修改什么
很多“解决方案”都说使用Stackpanel或其他东西来设置DataContext,但都不起作用。您是如何设置数据上下文的 数据上下文是WPF查找其绑定的地方。似乎您正试图绑定到您的代码,在这种情况下,您需要将DataContext设置为对象本身,并将字段st更改为属性
private Something _st;
public Something st
{
get
{
return _st;
}
set
{
_st = value;
OnNotifyPropertyChanged("st");
}
}
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
st = new Something();
}
但是,如果您总是希望绑定到st中的内容,那么直接将数据上下文设置为Something可能更有意义:
public MainWindow()
{
InitializeComponent();
st = new Something();
this.DataContext = st ;
}
然后像这样简单地绑定:
<TextBox Text="{Binding SomeText}">
这意味着您不需要实现INotifyPropertyChanged,也不需要在窗口中将st作为公共属性,但您应该在某些内容上,在SomeText的setter中触发更改通知。您是如何设置数据上下文的 数据上下文是WPF查找其绑定的地方。似乎您正试图绑定到您的代码,在这种情况下,您需要将DataContext设置为对象本身,并将字段st更改为属性
private Something _st;
public Something st
{
get
{
return _st;
}
set
{
_st = value;
OnNotifyPropertyChanged("st");
}
}
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
st = new Something();
}
但是,如果您总是希望绑定到st中的内容,那么直接将数据上下文设置为Something可能更有意义:
public MainWindow()
{
InitializeComponent();
st = new Something();
this.DataContext = st ;
}
然后像这样简单地绑定:
<TextBox Text="{Binding SomeText}">
这意味着您不需要在窗口上实现INotifyPropertyChanged或将st作为公共属性,但您应该在某些内容上,在SomeText的setter中触发更改通知。您首先必须将DataContext属性设置为ViewModel的实例,在本例中,它是某个类,因此,您需要在xaml表单的代码隐藏中设置上下文,如下所示:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Something st = new Something();
this.DataContext = st;
}
}
然后,在您的视图(即xaml文件)中,您可以设置控件的绑定,以绑定textbox的特定属性,如:
<TextBox x:Name="textbox" Text="{Binding SomeText}">
如果您想在WPF应用程序中使用正确的MVVM模式,那么应该使用而不是使用按钮的单击事件
您可能需要查看首先必须将DataContext属性设置为ViewModel的实例,在本例中,它是一个类,因此您需要在xaml表单的CodeBehind中设置上下文,如下所示:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Something st = new Something();
this.DataContext = st;
}
}
然后,在您的视图(即xaml文件)中,您可以设置控件的绑定,以绑定textbox的特定属性,如:
<TextBox x:Name="textbox" Text="{Binding SomeText}">
如果您想在WPF应用程序中使用正确的MVVM模式,那么应该使用而不是使用按钮的单击事件
您可能想看看,因为您在这个场景中使用的是按钮单击,我相信一个更简单的方法是将文本绑定到按钮单击方法本身的文本框中: cs文件: 公共部分类主窗口:窗口 { XAML: 因此,这里发生的事情是,我通过文本框的名称获取我在文本框中键入的txt。在按钮单击方法中,我将文本框中的文本绑定到字符串,并通过消息显示文本。显示对话框。
谢谢,希望有帮助。干杯因为您在这个场景中使用的是按钮单击,我相信一个更简单的方法是将文本绑定到按钮单击方法本身的文本框中: cs文件: 公共部分类主窗口:窗口 { XAML: 因此,这里发生的事情是,我通过文本框的名称获取我在文本框中键入的txt。在按钮单击方法中,我将文本框中的文本绑定到字符串,并通过消息显示文本。显示对话框。
谢谢,希望有帮助。干杯请检查如何进行绑定。从MSDN文章中获得基本理解。请检查如何进行绑定。从MSDN文章中获得基本理解。您的第一个示例还要求st是公共属性,而不是字段。哎呀,我的错误-没有注意到它是字段!您的第一个示例是lso要求st是一个公共属性,而不是一个字段。哦,我的错误-没有注意到它是一个字段!好的,我必须在codeBehind中设置DataContext。我想知道如何在视图中进行设置…:但我有一个可工作的基本程序,而不是一个开始的基本程序。谢谢。好的,我必须在codeBehind中设置DataContext。我想知道如何在codeBehind中进行设置观点虽然…:但我有一个基本的工作程序,而不是一开始的基本程序。谢谢。