【问题标题】:Add converter to page resources from code behind从代码后面添加转换器到页面资源
【发布时间】:2013-02-25 17:17:41
【问题描述】:

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

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

然后像这样绑定到它:

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

但我不断收到此异常:

在“System.Windows.Markup.StaticResourceHolder”上提供值抛出了一个 例外。

我对 WPF 有点陌生,任何建议都将不胜感激。

【问题讨论】:

    标签: wpf binding ivalueconverter


    【解决方案1】:

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

    两个建议:

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

    【讨论】:

    • 我没有尝试在 InitialiseComponent() 之前添加它,将尝试,需要阅读更多关于动态资源的信息。感谢您的回复
    【解决方案2】:

    您可以在页面的资源部分中声明要使用的转换器,如下例所示。 (我建议您在 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>
    

    【讨论】:

    • "我建议您在 XAML 中而不是在代码隐藏中声明转换器。"为什么?
    • “关注点分离”和可维护性:)
    • 我通常在 App.xaml 中将转换器声明为“全局”资源,在这种情况下需要后面的代码
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2022-06-29
    • 2013-10-23
    • 2013-02-27
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多