2016-11-12 4 views
0

Ich habe MainWindow.xaml Seite mit seinem MainViewModel und möchte 2 SidePanels mit einem UserControl hinzufügen, aber es sollte verschiedene ViewModels haben. MainViewModel hat alredy 2 Objekte mit erstellt SidePanelViewModels:Weisen Sie verschiedene ViewModels einem UserControl zu

public MainViewModel() 
{ 
    LeftSidePanel = new SidePanelViewModel(PanelSides.Left); 
    RightSidePanel = new SidePanelViewModel(PanelSides.Right); 
} 

Wie für jede Usercontrol in XAML-Objekte in diesen Eigenschaften als Datacontext setzen? So etwas wie dieses doesnot Arbeit:

<Window DataContext="{Binding MainViewModel, Source={StaticResource Locator}}"> 
... 
    <Grid Visibility="{Binding RightSidePanel.PanelVisibility}" Grid.Column="4" Grid.Row="2" > 
     <v:SidePanelViev DataContext="{Binding RightSidePanel}" /> 

    </Grid> 
</Window> 

ich alle Gehirne brach darüber nachzudenken, wie es zu tun, helfen Sie bitte

ps. Oder bitte irgendeine andere Ansatz vorschlagen das gleiche Ziel ..

+1

Was ist dein Problem? Was du gezeigt hast, sollte funktionieren. – dkozl

+0

Aber wenn ich versuche, eine Eigenschaft im Benutzersteuerelement zu binden, zeigt das Eigenschaftsfenster des Benutzersteuerelements, dass es keinen Datenkontext hat –

+1

Wild rate, aber in 'UserControl' Konstruktor tun Sie etwas wie' DataContext = this '? – dkozl

Antwort

1

Ich habe mein Problem gelöst durch Zugabe beide Instanzen von SidePanelViewModel als Inhalt des Content

<Window DataContext="{Binding MainViewModel, Source={StaticResource Locator}}"> 
... 
    <Grid Visibility="{Binding RightSidePanel.PanelVisibility}" Grid.Column="4" Grid.Row="2" > 
     <ContentControl Content="{Binding RightSidePanel}"></ContentControl> 

    </Grid> 
</Window> 

und das Hinzufügen neuer Window.Resource was bindet alle Klassen zu erreichen vom Typ SidePanelViewModel SidePanelViev

<Window.Resources> 
    <DataTemplate DataType="{x:Type vm:SidePanelViewModel}"> 
     <v:SidePanelViev></v:SidePanelViev> 
    </DataTemplate> 
</Window.Resources> 

Dies funktioniert mit visualisiert werden, aber wenn jemand eine bessere Idee hat, zögern Sie bitte nicht, sie zu schreiben, bin ich nicht sicher, dass meine Entscheidung gut ist ein

Verwandte Themen