在两个 UserControl 之间通信

Communicate between two UserControl's

我正在开发一些应用程序以获得更多 WPF 应用程序的经验。

我使用 MahApps.Metro 库的 TabItem 控件管理应用程序框架,如下所示:

MainWindow.xaml

<TabItem Header="Home">
    <ScrollViewer Margin="2"
        HorizontalScrollBarVisibility="Auto"
        VerticalScrollBarVisibility="Auto" Background="Transparent">
            <controlViews:HomeControl DataContext="{Binding}" />
    </ScrollViewer>
</TabItem>
<TabItem Header="Manage">
    <ScrollViewer Margin="2"
        HorizontalScrollBarVisibility="Auto"
        VerticalScrollBarVisibility="Auto">
            <controlViews:ManageControl DataContext="{Binding}" />
    </ScrollViewer>
</TabItem>

每个框架都有自己的 class 声明如下:

public partial class HomeControl : System.Windows.Controls.UserControl
{
    public HomeControl()
    {
        InitializeComponent();
    }
    // ....
}

HomeControl 表示可以从“管理”框架更改的信息。 我想在它们之间创建连接以在发生更改时进行更新 我有能力在 MainWindow 上创建 selectionChange 事件并检测用户何时切换到“主页”选项卡然后更新,但我在他自己的 class.

中管理他的所有功能和集成

我有哪些选择?

首先,您不需要绑定 Datacontext,因为它继承自它的可视父项(除非您另有要求)。 DataContext 设置为 MainWindow -> TabControl -> Tabitem -> UserControl

正如 Clemens 评论的那样,您需要一个通用的 ViewModel 作为 MVVM-pattern, whose Properties are bound to the Visuals inside your UserControl. Updating the values happens in the ViewModel (speaking of a very basic implementation), when Property changes (see: InotifyPropertyChanged)

的一部分

我为此做了一个非常基本的示例,参见 GitHub(它是 .net Framework 4.7.2,因此项目结构可能与您的不同)