2011-01-10 9 views
4

Ich habe eine DataGrid und zwei StaticResource.An statische Ressource mit einem Konverter binden

Ich möchte RowStyle von DataGrid an eine von zwei StaticResources binden.

RowStyle="{StaticResource {Binding Status, Converter={StaticResource MyConverter}}}" 

MyConverter gibt den Schlüssel von StaticResource zurück.

Aber ich bekomme diese Fehlermeldung:

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Antwort

2

Die Static Ressourcenschlüssel ist nicht ein Wert, der dynamisch zugeordnet werden können. Der Name des Schlüssels muss in den Xaml eingebunden werden. diese

Der richtige Ansatz ist: -

RowStyle="{Binding Status, Converter={StaticResource MyConverter}}" 

Wenn der Konverter, der gegen die „MyConverter“ -Taste kehrt ein Style Objekt gespeichert wird. Beachten Sie, dass Sie eine Eigenschaft des Typs ResourceDictionary zu Ihrem Konverter hinzufügen können und Sie Stile in dieses Wörterbuch für Ihren Konverter zum Suchen einfügen können.

In der Tat habe ich bereits einen Konverter geschrieben here.

+0

Wie kann ich 'ResourceDictionary Items' füllen? Das ist null. –

+0

@Navid: Starten Sie das Xaml im Blogpost Hinweis, dass die Elemente enthalten sind innerhalb '' Element. – AnthonyWJones

+0

OK TNX, das funktioniert. Ist es möglich, ein anderes 'ResourceDictionary' zu verwenden, z. ein 'ResourceDictionary' in' App.xaml'? –

0
// Another version of writing such a converter 

public abstract class BaseConverter : MarkupExtension 
{ 
    protected IServiceProvider ServiceProvider { get; set; } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     ServiceProvider = serviceProvider; 
     return this; 
    }  
} 


public class StaticResourceConverter : BaseConverter, IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return new StaticResourceExtension(value).ProvideValue(ServiceProvider); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     //TODO - implement this for a two-way binding 
     throw new NotImplementedException(); 
    } 
}