2017-08-17 4 views
0

Ich habe eine benutzerdefinierte WPF-Steuerbibliothek mit MVVM-Bibliotheken.Erstellen Sie einen Verweis auf Locator in einem ResourceDictionary

im Wörterbuch Ich habe:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:WpfCustomControlLibrary2" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        d1p1:Ignorable="d" 
        xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006"> 
<local:ViewModelLocator x:Key="Locator" 
         d:IsDataSource="True" /> 

Und in Window.xaml ich versuchen, dass Locator zu verwenden:

<Window x:Class="WPFCustomeControlLibrary.Window" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     Title="Window" Height="300" Width="300" 
     DataContext="{Binding MainViewModel, Mode=OneWay, Source={StaticResource Locator}}"> 
<Window.Resources> 
    <ResourceDictionary Source="Dictionary.xaml" /> 
</Window.Resources> 
<Grid> 

</Grid> 

Aber es sagt noch ‚Die Ressource Locator konnte nicht aufgelöst werden.

Locator ist mein ViewModelLocator, in dem mein MainViewModel definiert ist.

+0

Warum Sie es in einem Ressourcenverzeichnis an erster Stelle setzen? –

+0

@ThomasV da es keine andere Option in einer benutzerdefinierten WPF-Steuerbibliothek gibt. – user7998549

Antwort

1

Legen Sie es in App.xaml:

<Application x:Class="WpfApplication1.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApplication5" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
    <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Dictionary.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
    </Application.Resources> 
</Application> 

Die Ressource nicht im Fenster definiert werden kann, da es vor gelöst werden muss, die DataContext gesetzt.

würde Die andere Option zu setzen, die DataContext der Grid anstelle der Window:

<Window x:Class="WPFCustomeControlLibrary.Window" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     Title="Window" Height="300" Width="300"> 
    <Window.Resources> 
     <ResourceDictionary Source="Dictionary.xaml" /> 
    </Window.Resources> 
    <Grid DataContext="{Binding MainViewModel, Mode=OneWay, Source={StaticResource Locator}}"> 

    </Grid> 
</Window> 
+0

Es gibt keine App.xaml in einer benutzerdefinierten WPF-Steuerbibliothek. – user7998549

+0

Nein. Deshalb sollten Sie es zur App.xaml der eigentlichen Anwendung hinzufügen ... oder einen anderen Ansatz verwenden, wie ich in der Antwort vorgeschlagen habe. – mm8

+0

Ich denke, jedes Modul nur in der Hauptanwendung zu setzen. – user7998549

Verwandte Themen