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