从WPF中的窗口更改UserControl上的文本框的文本值

时间:2011-06-21 14:36:44

标签: wpf

我有一个UserControl(称为发票),其中一个文本框( txtReferenceCode )托管在MainWindow上的TabControl( myTabControl )中。从UserControl我调用一个窗口( SearchWindow ),其中包含一个库存项目列表。该窗口需要将一个字符串值返回到UserControl包含的文本框。我无法从窗口访问UserControl上的文本框,因此无法将字符串值从窗口传递到text属性。

UserControl是一个作为新tabItem加载的实例(可能有许多作为tabitems的内容打开。)我只需要影响UserControl的当前tabitem实例。

例如:(按钮单击SearchWindow中的事件)

Invoice.txtReferenceCode.Text = SearchWindow.txtReferenceCode.Text

我需要一个简单的简单解决方案,最好是在VB中(但我很乐意接受C#)。

2 个答案:

答案 0 :(得分:3)

我明白了!我在这里发布解决方案,以解决任何困扰这个问题的人。

XAML

WPF UserControl

<UserControl x:Class="Invoice"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300">

        <TextBox x:Name="txtReferenceCode" Width=100 />

</UserControl>

WPF窗口

<Window x:Class="SearchWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">

    <TextBox X:Name="TextToChangeTextBox" Width=100 />

</Window>

代码背后

向您的窗口添加属性

Class SearchWindow 

     Public ReadOnly Property TextValue
             Get
                 Return TextToChangeTextBox.Text
             End Get
     End Property

     ...

End Class

现在您可以使用窗口中的属性将字符串传递给UserControl上的TextBox。

Public Class Invoice

    Private Sub SetValueToTextBox

            Dim win As New SearchWindow
            win.ShowDialog()

            txtReferenceCode.Text = win.TextValue

    End Sub

    ...

End Class

*

就是这样! EASY!

*

答案 1 :(得分:1)

有更好的方法可以做到这一点(即在两个窗口之间共享一个视图模型,并让绑定根据需要更新文本框)。

但如果您坚持这样做,请尝试在文本框中添加一个公共修饰符,以便您可以按照自己的意愿访问它。

<TextBox Name="txtReferenceCode" x:FieldModifier="public"/>