【问题标题】:Two IMultiValueConverters with identical code, but different names - only one works两个具有相同代码但名称不同的 IMultiValueConverter - 只有一个有效
【发布时间】:2013-03-03 10:27:17
【问题描述】:

我遇到了一个奇怪的 WPF 问题。我的 WPF 项目引用的程序集中有两个 IMultiValueConverter 定义。它们的代码相同,但名称不同。我已经多次清理和重建程序集,但由于某种原因,只有一个值转换器工作,而另一个给出“clr 命名空间中不存在”xaml 错误。

注意:我知道该文件位于项目引用的正确命名空间和程序集中,因为我将 dll 直接反映在 WPF 项目的 bin 文件夹中。

对这种现象有什么解释吗?

//// this works
public class IndexConverter : IMultiValueConverter
{
    public virtual object Convert(
        object[] values, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    {
        var element = values[0] as Object;
        var sequence = values[1] as IEnumerable;
        return sequence.Cast<Object>().ToList().FindIndex(c => c.Equals(element)).ToString();
    }

    public virtual object[] ConvertBack(
        object value, Type[] targetTypes,
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}



////  this gives me xaml errors
public class IndexConverterCopy : IMultiValueConverter
{
    public virtual object Convert(
        object[] values, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    {
        var element = values[0] as Object;
        var sequence = values[1] as IEnumerable;
        return sequence.Cast<Object>().ToList().FindIndex(c => c.Equals(element)).ToString();
    }

    public virtual object[] ConvertBack(
        object value, Type[] targetTypes,
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

【问题讨论】:

  • 你能显示一些代码吗?
  • 从 xaml 中删除第二个 Converter 的引用,然后构建该转换器可用的项目,然后将 xaml 删除的代码添加回来,然后构建。
  • 几个小问题 - 命名空间是一样的吗?还有你在哪里引用这些转换器的xaml(你也可以发布那个代码)?使方法虚拟化的任何原因(虽然不相关)?
  • 我只是复制粘贴了两个工作正常?? VS2012 在 xaml 编辑器中有一些非常烦人的错误,尝试在另一个 VS 实例中打开你的项目,看看它是否在那里编译
  • @ethicallogics - 没有骰子

标签: wpf xaml data-binding ivalueconverter imultivalueconverter


【解决方案1】:

新的 VS2012 中有一些奇怪的错误,看起来像是某种缓存问题。

唯一的解决办法是重启 VisualStudio。

到目前为止,我发现了 3 个这样的错误

  1. 更改您的 xaml 布局,它会在设计器视图中更改,按 F5 到 构建,应用程序没有显示新的变化,需要 VS 重启
  2. 您所有的撤消数据都消失了,并且 ctrl+z 不再起作用,需要 VS 重启
  3. Designer 不会显示任何内容并显示IndexOutOfRange 例外,需要 VS 重启

这个问题听起来像是来自 xaml 和 cs 以某种方式变得不同步的同一区域,因此重新启动 VS 也可能是解决您的问题的唯一方法(带上 SP1)

【讨论】:

    猜你喜欢
    • 2022-10-25
    • 2014-11-12
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多