2010-08-30 5 views
9

Ich möchte an eine Ressource (DynamicResource) binden und auf Eigenschaften für diese Ressource zugreifen, aber gibt es eine Möglichkeit, das zu tun?Wie mit dynamischer Ressource zu binden und einen Pfad anzugeben

(Ich möchte die Standardwerte von Konstruktor im XAML-Editor in Visual Studio sichtbar zu machen. Diese können nicht gesehen werden, wenn ein Objekt durch Datacontext Referenzierung noch durch eine Eigenschaft auf meiner Fenster-Klasse hinzugefügt ...)

Ein Problem xAML: (Werke in Komponisten aber nicht zur Laufzeit ...)

<Window ... > 
    <Window.Resources> 
     <local:MyClass x:Key="myResource" /> 
    </Window.Resources> 
    <StackPanel> 
     <Button Content="{Binding Source={DynamicResource myResource} Path=Property1}" /> 
     <Button Content="{Binding Source={DynamicResource myResource} Path=Property2}" /> 
    </StackPanel> 
</Window> 

mit der Klasse (die wahrscheinlich braucht INotifyPropertyChanged zu implementieren):

public class MyClass 
{ 
    public MyClass() 
    { 
     this.Property1 = "Ok"; 
     this.Property2 = "Cancel"; 
    } 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
} 

Antwort

19

Der Grund dafür ist, dass die Markup-Erweiterung DynamicResource nur für eine Abhängigkeitseigenschaft verwendet werden kann, da sie aktualisiert werden muss, wenn sich die Ressource ändert. Und Binding.Source ist keine Abhängigkeitseigenschaft ...

Als Abhilfe können Sie die DataContext der Taste mit den DynamicResource einstellen könnten:

<Button DataContext="{DynamicResource myResource}" Content="{Binding Path=Property1}" /> 
<Button DataContext="{DynamicResource myResource}" Content="{Binding Path=Property2}" /> 
+1

+1, scheint dies eine sauberere Arbeit herum zu sein und ich Habe das gut gemacht – marr75

+1

Vergiss nicht die Antwort dann zu akzeptieren;) –

Verwandte Themen