通过主窗口文本绑定用户控件的文本框

时间:2015-10-08 05:21:38

标签: wpf mainwindow

我正在研究WPF项目。我创建了一个用户控件名称为" CanLogPaneView"。此用户控件包含一个名为" txt_CanLog"的文本框。 我绑定了这个文本框,如下所述:

<UserControl x:Class="CANCONTROL.CanLogPaneView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:CANCONTROL"
             xmlns:ViewModels="clr-namespace:CANCONTROL.ViewModels;assembly=CANCONTROL.ViewModels"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
        <DataTemplate x:Key="MainWindowViewModel" DataType="{x:Type ViewModels:MainWindowViewModel}">
        </DataTemplate>
    </UserControl.Resources>
    <DockPanel>
        **<TextBox x:Name="txt_CanLog" Text="{Binding Text, Source={StaticResource MainWindowViewModel}}" >**

        </TextBox>
    </DockPanel>
</UserControl>

所以我将文本框与mainwindow属性Text绑定。我的主窗口有一个视图模型。在那里我定义了属性Text,如下所述:

public string text = string.Empty;
public string Text
        {
            get
            {
                return text;
            }

            set
            {
                text = text + value;
            }
        }
主窗口代码中的

:MainWindow.xaml.cs我正在添加文本 this.ViewModel.Text =&#34; \ n \ nAPPLICATION CONFIGURATION \ r \ n&#34;;

我想要的是通过mainwindow.xaml.cs代码我想在CanLogPaneView.xaml的textBox中打印一些数据

1 个答案:

答案 0 :(得分:0)

您的MainWindowViewModel应绑定到Usercontrol的DataContext。 另外,在MainWindowViewModel中实现INotifyPropertyChanged,在“Text”setter中实现RaisePropertyChange

如下所示

<Window x:Class="WpfTestProj.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    mc:Ignorable="d" 
    xmlns:local="clr-namespace:WpfTestProj"
    Title="MainWindow" Height="350" Width="525"
    d:DataContext="{d:DesignInstance Type=local:MainViewModel, IsDesignTimeCreatable=False}">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
    </Grid.RowDefinitions>

    <TextBox Text="{Binding Text}" />
</Grid>

public class MainViewModel : ViewModelBase
{
    private string _text;

    public string Text
    {
        get { return _text; }
        set
        {
            _text = value;
            OnPropertyChanged();
        }
    }
}