如何在wpf中将数据从用户控件传递到主控件

时间:2013-07-24 05:58:42

标签: wpf wpf-controls wpf-4.0

我在主winodw中有状态栏控件。我在主窗口中放置了一个用户控件。我的用户conrtorl有按钮。

如果我单击用户控件中的按钮,我需要更新主窗口状态栏。

我正在关注MVVM模式。我不知道如何实现这个目标。我是wpf的初学者。

3 个答案:

答案 0 :(得分:2)

您需要使用依赖属性 UserControl 向主控制发送内容。

例如:如果要从按钮中更改主窗口中存在的文本块的文本,请单击USerControl中的“显示”。

您需要将DependencyProperty绑定到TextBlock TEXT属性以反映更改,并且您的USERCONTROL必须实现INotifyPropertyChange

在UserControl中创建此DependencyProperty

 public static readonly DependencyProperty TextProperty = DependencyProperty.Register("WriteText", typeof(string), typeof(UserControlnameSpace)) //Write Namespace of your UserControl where I mentioned

        public string WriteText
        {
            get { return (bool)GetValue(TextProperty ); }
            set
            {
                SetValue(TextProperty , value);
            }
        }

USERCONTROL中的ButtonClick事件

public void Button_Click(object sender, RoutedEventArgs e)
        {
WriteText="Hie"; //Write what you want to display on MainWindow.
}

<强>视图模型: -

private string _txtContent;

        public string TxtContent
        {
            get
            {
                return _txtContent;
            }

            set
            {
                _txtContent = value;
                RaisePropertyChanged("TxtContent");
            }
        }

主窗口: -

<TextBlock Text="{Binding TxtContent,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

包含UserControl的位置: - 包含此属性

<UserControl WriteText={Binding TxtContent Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />

答案 1 :(得分:0)

您可以将用户控件的DataContext(viewmodel)设置为与主窗口相同。在viewModel中保留一个属性,并将该属性绑定在用户控件中。因此,只要Control中发生任何更改,该属性将在View模型中自动更新,可供Main使用

答案 2 :(得分:0)

我建议usercontrol使用自己的viewmodel。主窗口有一个主控制器,负责初始化状态栏信使服务,用户控制视图模型使用该服务。

用户控件的视图模型通过RelayCommand绑定到按钮的操作,并且在执行操作时,它使用状态栏服务来更新状态。

这使您可以在主窗口上使用状态栏来处理应用程序的多个用户控件/页面。