用户控件如何访问 MainWindow 中的文本框值?
how do UserControls get access to a textbox's value in MainWindow?
UserControls
被放入 MainWindow
但它们不会相互实例化 - 它们没有所有者-成员关系。
我需要 UserControls
的后端代码才能从 MainWindow
的 TextBox
中获取值。我被告知要使用数据绑定,但我真的不知道要在 UserControls
.
中绑定什么
创建接口:
interface Interface_ProSimIP
{
string ProSimIP_Text { get; set; }
}
在 MainWindow
视图模型中:
string Interface_ProSimIP.ProSimIP_Text
{
get
{
return ProSimIP.Text;
}
set
{
}
}
在MainWindow
视图中:
<TextBox x:Name="ProSimIP" Text="{Binding Path=ProSimIP_Text, Mode=OneWay}..."
我不知道我这样做是否正确,我不知道如何在 UserControls
代码后面实现接口。
您可以对父级 window 和用户控件使用相同的 DataContext
(视图模型)。将 window 的 DataContext
属性 设置为视图模型 class 的实例,您可以在其中实现您的逻辑,然后从 [=35] 绑定到视图模型的属性=] window 和用户控件的视图。然后 window 和控件有效地共享相同的 "back-end" 代码。
此模式称为 MVVM,它是 推荐的模式,可在开发基于 XAML 的 UI 应用程序时使用。你应该学习它。以下 MSDN 页面可能为您提供一个很好的起点:https://msdn.microsoft.com/en-us/library/hh848246.aspx.
另一种方法(如果您对 MVVM 模式一无所知或不遵循 MVVM 模式,可能会更糟但可能更快采用)方法是使用 UserControl
从 window 获取对 window 的引用Window.GetWindow
方法,然后直接访问 window 中定义的任何控件:
var window = Window.GetWindow(this) as MainWindow:
if (window != null)
string text = window.ProSimIP.Text;
您应该注意到,在开发松散耦合、可维护和可测试的应用程序时,这种代码并没有遵循最佳实践。
UserControls
被放入 MainWindow
但它们不会相互实例化 - 它们没有所有者-成员关系。
我需要 UserControls
的后端代码才能从 MainWindow
的 TextBox
中获取值。我被告知要使用数据绑定,但我真的不知道要在 UserControls
.
创建接口:
interface Interface_ProSimIP
{
string ProSimIP_Text { get; set; }
}
在 MainWindow
视图模型中:
string Interface_ProSimIP.ProSimIP_Text
{
get
{
return ProSimIP.Text;
}
set
{
}
}
在MainWindow
视图中:
<TextBox x:Name="ProSimIP" Text="{Binding Path=ProSimIP_Text, Mode=OneWay}..."
我不知道我这样做是否正确,我不知道如何在 UserControls
代码后面实现接口。
您可以对父级 window 和用户控件使用相同的 DataContext
(视图模型)。将 window 的 DataContext
属性 设置为视图模型 class 的实例,您可以在其中实现您的逻辑,然后从 [=35] 绑定到视图模型的属性=] window 和用户控件的视图。然后 window 和控件有效地共享相同的 "back-end" 代码。
此模式称为 MVVM,它是 推荐的模式,可在开发基于 XAML 的 UI 应用程序时使用。你应该学习它。以下 MSDN 页面可能为您提供一个很好的起点:https://msdn.microsoft.com/en-us/library/hh848246.aspx.
另一种方法(如果您对 MVVM 模式一无所知或不遵循 MVVM 模式,可能会更糟但可能更快采用)方法是使用 UserControl
从 window 获取对 window 的引用Window.GetWindow
方法,然后直接访问 window 中定义的任何控件:
var window = Window.GetWindow(this) as MainWindow:
if (window != null)
string text = window.ProSimIP.Text;
您应该注意到,在开发松散耦合、可维护和可测试的应用程序时,这种代码并没有遵循最佳实践。