【问题标题】:How to pass data from user control to main control in wpf如何将数据从用户控件传递到wpf中的主控件
【发布时间】:2013-07-23 11:19:30
【问题描述】:

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

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

我遵循 MVVM 模式。我不知道如何实现这一点。我是 wpf 的初学者。

【问题讨论】:

    标签: wpf wpf-controls wpf-4.0


    【解决方案1】:

    您需要使用 Dependency PropertyUserControl 向主控件发送内容。

    例如:如果您想通过单击 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 WriteText={Binding TxtContent Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
    

    【讨论】:

    • 谢谢。您能否提供一些我可以重复使用的代码示例。
    【解决方案2】:

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

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

    这使您在主窗口上的状态栏能够与您的应用程序的多个用户控件/页面一起使用。

    【讨论】:

      【解决方案3】:

      您可以将用户控件的 DataContext(viewmodel) 设置为与主窗口相同。在 viewModel 中保留一个属性并将该属性绑定到用户控件中。因此,每当 Control 中发生任何变化时,该属性都会在 View Model 中自动更新,Main 可以使用该属性

      【讨论】:

      • 在您的情况下,如果用户控件是由 mvvm 模式制作的,那么它将产生问题..
      猜你喜欢
      • 2014-07-01
      • 1970-01-01
      • 2011-01-27
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      相关资源
      最近更新 更多