在我的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}
}
现在我也有一个函数来打开一个新窗口,这个窗口包含一个文本框,其文本应该被绑定到主窗口的datacontext。
private void MenuComm_Click(object sender, RoutedEventArgs e)
{
FrmSettings newWindow = new FrmSettings();
newWindow.DataContext = mMeasConSettings;
newWindow.TxtComm.Text = mMeasConSettings.CommSettings;
newWindow.Show();
}
这段代码用正确的内容填充newWindow中的文本框,但它没有得到绑定属性,因为在更改文本框中的文本(新创建的窗口中的TxtComm)后,datacontext没有得到更新。
文本框的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";
}
}
我的问题是如何调整mMeasConSettings的值。CommSettings(在我的MainWindow中定义)在我的newWindow中(按下按钮后创建),如果我在我的newWindow中更改文本框值,则存储在mMeasConSettings中的值。CommSettings也应该更改。
PS:我是WPF的新手,所以欢迎任何建议!
3条答案
按热度按时间xmd2e60i1#
正如我在评论中所写的,您需要将
TextBox
的Text
属性绑定到您想要更新的DataContext
的属性。你的XAML应该是这样的:请注意,我将
TextBox
的Text
属性绑定到DataContext
的CommSettings
属性。您的C#
-code for the click event应该是:我们只需要在这里设置
DataContext
。请注意,DataContext
被沿着给子元素,因此TextBox
将具有与其父元素相同的DataContext
,除非特别设置为其他元素。kcwpcxri2#
使用静态属性:
在其他文件中:
at0kjp5o3#
我在第二个窗口中添加了一个属性,并通过构造函数将参数传递给该属性。我的代码传递字典
//在主窗口中:
//在第二个窗口(我命名为w_SelectionWindow2)