添加转换器以从后面的代码页面资源

时间:2013-02-25 17:17:41

标签: wpf binding ivalueconverter

我想在页面的资源中添加一个类的特定实例,然后将该类用作转换器,所以在我的页面构造函数中我放了:

this.Resources.Add("converterASD", new ASDConverter());

然后像这样绑定它:

<ListBox ItemsSource="{Binding Converter={StaticResource converterASD}}"/>

但我一直得到这个例外:

  

在'System.Windows.Markup.StaticResourceHolder'上提供一个值   异常。

我对WPF有点新意,任何建议都会受到赞赏。

2 个答案:

答案 0 :(得分:3)

我们可以使用异常中的更多信息。

两个建议:

  1. 确保在调用InitializeComponent()之前添加资源。
  2. 尝试将其切换为动态资源。

答案 1 :(得分:0)

您可以在页面的资源部分声明要使用的Converter,如下例所示。 (我建议您在XAML中声明转换器而不是代码隐藏)

示例:

<UserControl x:Class="Views.ConverterExample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300"
        d:DesignWidth="300">
    <UserControl.Resources>
        <BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter" />
    </UserControl.Resources>
    <Grid>
        <CheckBox x:Name="VisibilityController" IsThreeState="False" />
        <ListBox
            Visibility="{Binding ElementName=VisibilityController, Path=IsChecked,Converter={StaticResource BoolToVisibilityConverter}}"
            Height="100" Width="100" BorderBrush="Red" BorderThickness="1" />
    </Grid>
</UserControl>