【问题标题】:Importing converter from dll into XAML将转换器从 dll 导入 XAML
【发布时间】:2015-03-09 20:50:37
【问题描述】:

我在 dll 文件 MicroMVVM 中有一个 EnumToBool 转换器类。我想在我的 WPF 应用程序的 XAML 中导入并创建此类的资源。以下是我在 XAML 中的声明的样子:

<Window x:Class="WpfMVVM.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfMVVM"
        xmlns:micro="clr-namespace:MicroMVVM;assembly=MicroMVVM"
        Title="MainWindow" Height="350" Width="525" ContentRendered="Window_ContentRendered">
    <Window.DataContext>
        <!-- Declaratively create an instance of our SongViewModel -->
        <local:SabrixQAViewModel />
    </Window.DataContext>
    <Window.Resources>
        <micro:EnumToBoolExtension x:Key="EnumToBool" />
    </Window.Resources>

我在“clr-命名空间”中遇到错误。错误是“未定义的 CLR 命名空间。‘clr-namespace’ URI 引用了程序集中未包含的命名空间‘MicroMVVM’。

我在我的解决方案中添加了 MicroMVVM.dll 的引用,并且我正在 ViewModel 中使用其他类的 dll。但是,尝试在 XAML 中使用它时出现错误。请帮忙。

以下是 Converter 类在 MicroMVVM 中的外观:

namespace MicroMvvm
{
    public enum ValidationMode
    {
        GSS,
        Digital
    }

    [ValueConversion(typeof(bool), typeof(Enum))] //This is converting boolean value to a value in Enum
    public class EnumToBoolExtension : MarkupExtension, IValueConverter
    {
        #region IValueConverter

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return parameter.Equals(value);
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ((bool)value) == true ? parameter : DependencyProperty.UnsetValue;
        }

        #endregion

        #region MarkupExtension

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

        #endregion
    }
}

【问题讨论】:

  • 验证转换器的命名空间。
  • 我也包含了 Converter 类,命名空间是正确的。请看一看。
  • 我是否需要在 AssemblyInfo.cs 中添加程序集 MicroMVVM 才能在 XAML 中使用它?

标签: c# .net wpf xaml


【解决方案1】:

尝试改变这一点:

xmlns:micro="clr-namespace:MicroMVVM; assembly=MicroMVVM"

到:

xmlns:micro="clr-namespace:MicroMvvm;assembly=MicroMVVM"

【讨论】:

    【解决方案2】:

    您的前缀声明中的 分号 和单词 assembly 之间有一个空格。这会使语法错误。尝试删除该空间,然后重试。

    【讨论】:

    • 删除了空间,仍然得到未定义的 clr 命名空间错误。请帮忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2020-10-04
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多