UserControls如何在MainWindow中访问文本框的值?

时间:2017-12-12 09:37:48

标签: c# wpf mvvm user-controls

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代码中实现接口。

1 个答案:

答案 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;

您应该注意,在开发松散耦合,可维护和可测试的应用程序时,这种代码并不遵循最佳实践。