【发布时间】:2013-03-21 14:00:31
【问题描述】:
在我的 MainWindow 中,我创建了一个包含不同设置的类的新实例。设置类的参数后,我将datacontext =设置为那个类。
public partial class MainWindow : Window
{
private MeasConSettings mMeasConSettings = new MeasConSettings();
public MainWindow()
{
InitializeComponent();
DataContext = mMeasConSettings;
}
private void MenuComm_Click(object sender, RoutedEventArgs e)
{// See code below}
}
现在我还有一个打开一个新窗口的功能,这个窗口包含一个文本框,它的文本应该绑定到 MainWindow 的数据上下文。
private void MenuComm_Click(object sender, RoutedEventArgs e)
{
FrmSettings newWindow = new FrmSettings();
newWindow.DataContext = mMeasConSettings;
newWindow.TxtComm.Text = mMeasConSettings.CommSettings;
newWindow.Show();
}
此代码使用正确的内容从 newWindow 填充文本框,但它没有得到绑定属性,因为在更改文本框中的文本后 datacontext 没有得到更新(新创建的窗口中的 TxtComm)。
文本框的 XAML 代码示例:
<TextBox Grid.Row="1" Grid.Column="3" Margin="2,0" Name="TxtComm" DataContext="{Binding Path=CommSettings, UpdateSourceTrigger=PropertyChanged}" />
“CommSettings”是 MeasConsettings 类的成员
public class MeasConSettings
{
private string mCommSettings;
public string CommSettings
{
get
{
return mCommSettings;
}
set
{
mCommSettings = value;
}
}
public MeasConSettings()
{
CommSettings = "Com5:19200,8,n,1";
}
}
我的问题是如何在我的 newWindow(按下按钮后创建)中调整值 mMeasConSettings.CommSettings(在我的 MainWindow 中定义),如果我更改 newWindow 中的文本框值,则存储在 mMeasConSettings 中的值。 CommSettings 也应该更改。
PS:我是 WPF 新手,欢迎提出任何建议!
【问题讨论】:
-
我没有看到在您的代码中创建了绑定。您需要将
TextBox的Text属性绑定到DataContext中的属性,该属性应使用双向绑定进行更改。您的带有TextBox的XAML 应该有类似<TextBox Text="{Binding CommSettings, Mode=TwoWay}" />的内容。 -
@odyss-jii 感谢将文本框的 XAML 更改为
<TextBox Grid.Row="1" Grid.Column="3" Margin="2,0" Name="TxtComm" Text="{Binding Path=CommSettings, UpdateSourceTrigger=PropertyChanged}" />它工作了!!!
标签: c# wpf window datacontext