5

MainWindow左側のナビゲーション パネルと右側の表示領域をレイアウトする次のものがあります (これらは両方とも ですUserControls)。

DataContextナビゲーション パネル ( LinksView.xaml)の を の に割り当てる方法を誰か説明できますかLinksViewModel.csBtnCompanyClickCommandCommand( ) をボタンにバインドし、 で定義BtnCompanyClickCommandしたいと思いますLinksViewModel.cs

DataContext を設定するために StackOVerflow で見つけたさまざまな方法を試しましたが、これらの解決策はどれも機能していないようです (RelativeSource のバインド、ビューの名前付け、名前へのバインドなど)。

MainWindow.xaml

<StackPanel Orientation="Horizontal">
    <vw:LinksView DataContext="{Binding RelativeSource={RelativeSource Self}}"/>
    <ContentControl Content="{Binding CurrentUserControl}" />

</StackPanel>

LinksView.xaml

<StackPanel Orientation="Vertical">
    <Button Content="Company" Width="75" Margin="3" Command="{Binding ElementName=Links,Path=BtnCompanyClickCommand}" />
</StackPanel>

FormsDictionary.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:vm="clr-namespace:SidekickAdmin.ViewModel"
                    xmlns:vw="clr-namespace:SidekickAdmin.View">

    <DataTemplate DataType="{x:Type vm:CompanySummaryViewModel}">
        <vw:CompanySummaryView>
            <ContentControl Content="{Binding }" />
        </vw:CompanySummaryView>
    </DataTemplate>

    <DataTemplate DataType="{x:Type vm:LinksViewModel}">
        <vw:LinksView />
    </DataTemplate>

</ResourceDictionary>

編集

そのため、UserControl の最初の子項目で行う必要がある UserControl の DataContext を設定する方法について、この説明にようやく出くわしました。

動作する変更された LinksView.xaml を次に示します。

<StackPanel Orientation="Vertical">
    <StackPanel.DataContext>
        <vm:LinksViewModel />   <!-- Bind the items in StackPanel to LinksViewModel -->
    </StackPanel.DataContext>

    <Button Content="Company" Width="75" Margin="3" Command="{Binding BtnCompanyClickCommand}" />
</StackPanel>

ただし、UserControl ではなく子要素の DataContext を設定する必要がある理由と、LinksView の DataTemplate (FormsDictionary.xaml で設定) が LinksViewModel の DataContext に結び付けられない理由については、まだ明確ではありません。説明をいただければ幸いです。

4

2 に答える 2

0

まず、XAML コードで DataContext (LinksViewModel.cs) を参照する必要があります。これは、直接インスタンス化するか、ResourceDictionary を使用して行うことができます。後者の場合、.cs ファイル内または ResourceDictionary .xaml ファイル内で DataConext をインスタンス化し、名前付きの ResourceDictionary に格納して、後で参照できるようにします。

次に、LinksView.xaml などの View 要素の DataContext プロパティを、対応する DataContext に関連付けるだけです。

これは非常に高レベルで、コードはありませんが、それが背後にある基本的な考え方です。

于 2013-01-02T05:37:58.440 に答える