在两个 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,因此项目结构可能与您的不同)
我正在开发一些应用程序以获得更多 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,因此项目结构可能与您的不同)