我有一个WPF应用程序,其中包含大量包含按钮和文本控件的选项卡项。为了减小XAML文件的大小,我想用用户控件来表示选项卡内容。按钮点击引起的控制操作访问相同的数据,因此我想知道如何在这些用户控件之间共享数据。
为了进一步说明,我的应用程序正在控制设备,并且标签根据各种操作模式执行各种操作。例如tab1有按钮初始化和运行,调用myDevice.initialise()和myDevice.run()。 Tab2处理校准,因此调用myDevice.calibrate()等。
目前我在主应用程序中创建了myDevice对象,因此想知道如何与为每个选项卡定义的自定义控件共享它,以便按钮单击回调可以访问myDevice。
提前致谢。
答案 0 :(得分:1)
我建议在List<IOperationMode> OperationsModes
中保留myDevide
列表,然后为每种操作模式创建一组类:
class OperationModeInitialise : IOperationMode
{
}
class OperationModeCalibrate : IOperationMode
{
}
....
并为您在DataTemplate
中创建TabControl.Resources
资源的每种类型:
<DataTemplate DataType="{x:Type my:OperationModeInitialise}">
<my:OperationModeInitialiseControl/>
</DataTemplate>
<DataTemplate DataType="{x:Type OperationModeCalibrate}">
<my:OperationModeCalibrateControl/>
</DataTemplate>
....
将myDevice.OperationsModes
绑定到TabControl.ItemsSource
,并且每个共享一个设备的操作模式都有一个标签。
答案 1 :(得分:0)
您可以在App.vb / App.cs文件中添加对myDevice的引用,并将其设置为公共属性。这样做是一种hackish方式,但应该可以正常工作。
答案 2 :(得分:0)
最简单的方法可能是在DependencyProperty
上创建UserControl
,以便您可以传递myDevice
,或使用RelativeSource
绑定设置DataContext
所有标签项都有1}}到myDevice
。
您选择哪种方式取决于数据层的组织方式以及UserControls
以下是一个快速示例,说明如何将myDevice
属性设置为TabItem的DataContext
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="DataContext"
Value="{Binding Path=DataContext.MyDevice,
RelativeSource={RelativeSource {x:Type TabControl}}}" />
</Style>
</TabControl>