Привязка к статическому ресурсу с помощью конвертера - PullRequest
4 голосов
/ 10 января 2011

У меня есть DataGrid и два StaticResource.

Я хочу связать RowStyle DataGrid с одним из двух StaticResources.

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

MyConverter возвращает ключ StaticResource.

Но я получаю эту ошибку:

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

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Ключ ресурса Статический не является значением, которое может быть присвоено Динамически .Имя ключа должно быть встроено в Xaml.

Правильный подход заключается в следующем: -

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

, где преобразователь, хранящийся в ключе MyConverter, возвращает Style объект.Обратите внимание, что вы можете добавить свойство типа ResourceDictionary к вашему конвертеру и поместить ваши стили в этот словарь для вашего конвертера для поиска.

На самом деле я уже написал конвертер, способный к этому здесь .

0 голосов
/ 14 февраля 2014
// 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(); 
    }
}
...