0

主にボタンとテキスト コントロールを含む多数のタブ項目を持つ WPF アプリケーションがあります。XAML ファイルのサイズを小さくするために、タブの内容をユーザー コントロールで表現したいと考えています。ボタンのクリックによるコントロール アクションは同じデータにアクセスするため、これらのユーザー コントロール間でデータを共有する方法を知りたいです。

さらに説明すると、私のアプリケーションはデバイスを制御しており、タブはさまざまな操作モードに応じてさまざまなアクションを実行します。たとえば、tab1 には、myDevice.initialise() と myDevice.run() を呼び出す初期化ボタンと実行ボタンがあります。Tab2 はキャリブレーションを処理するため、myDevice. calibration() などを呼び出します。

現在、メイン アプリケーションで 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、1 つのデバイスを共有する操作モードごとに 1 つのタブがあります。

于 2013-05-30T09:20:50.870 に答える
0

myDevice への参照を App.vb/App.cs ファイルに配置して、それをパブリック プロパティにすることができます。一種のハックな方法ですが、うまくいくはずです。

于 2013-05-30T00:20:37.083 に答える
0

最も簡単な方法は、DependencyPropertyon を作成してUserControl渡すことができるようにするか、バインディングをmyDevice使用してすべてのタブ項目に toを設定することです。RelativeSourceDataContextmyDevice

どちらを選択するかは、データ レイヤーがどのように構成されているか、およびデータ レイヤーに必要な他のデータによって異なります。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 に答える