0

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

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

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

4

3 回答 3

2

您需要使用Dependency Property从UserControl向 Main Control 发送内容。

例如:如果您想从按钮更改主窗口中存在的文本块的文本 单击 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}" />
于 2013-07-24T07:35:28.923 回答
0

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

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

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

于 2013-07-24T06:59:10.057 回答
0

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

于 2013-07-24T06:16:34.300 回答