使用转换器绑定静态资源

4

我有一个 DataGrid 和两个 StaticResource

我想将 DataGrid 的 RowStyle 绑定到两个 StaticResources 中的一个。

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

MyConverter返回StaticResource的Key。

但是我遇到了以下错误:

尝试读取或写入受保护的内存。这通常是其他内存已损坏的迹象。

2个回答

2

静态资源键不是可以动态分配的值。该键的名称需要在Xaml中内联。

正确的方法如下:

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

在存储在“MyConverter”键下的转换器返回一个Style对象。请注意,您可以向转换器添加一个ResourceDictionary类型的属性,并将样式放入该字典中,供转换器查找。

实际上,我已经编写了一个能够实现这一点的转换器(在此处)


我该如何填充“ResourceDictionary Items”?它是空的。 - Navid Farhadi
@Navid:在博客文章中开始Xaml,请注意所包含的项都在<ResourceDictionary></ResourceDictionary>元素内。 - AnthonyWJones
好的,谢谢。这个可以工作。是否可以使用另一个ResourceDictionary,例如在App.xaml中的ResourceDictionary - Navid Farhadi
@Navid:只需将转换器移动到App.xaml即可。 - AnthonyWJones

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(); 
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接