0

我有一个 WPF 应用程序,其中包含大量主要包含按钮和文本控件的选项卡项。为了减小 XAML 文件的大小,我想用用户控件来表示选项卡内容。按钮单击引起的控件动作访问相同的数据,所以我想知道如何在这些用户控件之间共享数据。

为了进一步说明,我的应用程序正在控制设备,并且选项卡根据各种操作模式执行各种操作。例如tab1 有按钮初始化和运行,调用myDevice.initialise() 和myDevice.run()。Tab2 处理校准,因此调用 myDevice.calibrate() 等。

目前我在主应用程序中创建了 myDevice 对象,因此想知道如何与为每个选项卡定义的自定义控件共享它,以便按钮单击回调可以访问 myDevice。

提前致谢。

4

3 回答 3

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.OperationsModesTabControl.ItemsSource,对于共享一个设备的每种操作模式,您都有一个选项卡。

于 2013-05-30T09:20:50.870 回答
0

您可以在您的 App.vb/App.cs 文件中引用 myDevice 并将其设为公共属性。这是一种骇人听闻的方式,但应该可以。

于 2013-05-30T00:20:37.083 回答
0

最简单的方法可能是DependencyProperty在您的上创建一个UserControl以便您可以传递它myDevice,或者使用RelativeSource绑定将所有选项卡项设置DataContextmyDevice

您选择哪一个取决于您的数据层的组织方式以及您需要的其他数据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>
于 2013-05-30T12:51:10.897 回答