VS2017显示错误:字典不是集合

时间:2018-02-08 08:46:49

标签: c# xaml visual-studio-2017 resharper

我在C#中有一个带有词典的课程

public class Testing {
   public Dictionary<string, OtherClass> AdditionalProperties {get;} = new Dictionary<string, ISomeIFace>();
}

public class OtherClass : ISomeIFace {
    public string SomeProp { get; set; }
}

用于XAML文件

<CheckBox Grid.Column="0" IsChecked="{Binding AdditionalProperties[SomeKey].(local:OtherClass.SomeProp)}" />

它显示以下错误:

  

Type&#39; Dictionary&#39;不是一个集合。

SomeKey下的卷曲线。

我很快安装了Resharper,我怀疑它之前没有告诉我这个错误。

我仍然可以编译并且代码运行成功,但如果没有错误错误会更好。

3 个答案:

答案 0 :(得分:0)

从Resharper的角度来看:

如果这是Resharper'错误'警告的问题,请注意您可以通过执行Ctrl + Enter来执行以下操作:

  1. 配置检查严重性(以便显示为提示,而不是错误)
  2. 检查'为什么Resharper建议这样做',它会带您进入解释代码潜在问题的页面
  3. enter image description here

    请注意,这个答案不会评估您的绑定,视图模型等是否设计得恰当 - 只是处理问题,因为如果没有错误错误,'会更好。'

答案 1 :(得分:0)

将属性指定为嵌套元素似乎可以修复错误。 尝试转换这个:

<CheckBox Grid.Column="0" IsChecked="{Binding AdditionalProperties[SomeKey].(local:OtherClass.SomeProp)}" />

到此:

<CheckBox Grid.Column="0">
    <CheckBox.IsChecked>
        <Binding Path="AdditionalProperties[SomeKey].(local:OtherClass.SomeProp)" />
    </CheckBox.IsChecked>
</CheckBox>

答案 2 :(得分:0)

假设我有一个MenuItem。将字典设置为MenuItem的DataContext。然后在参数中设置键值,例如Command

<MenuItem Header="Exit" DataContext="{Binding MenuCommands, Mode=OneTime}"
        Command="{Binding [File_Exit], Mode=OneTime}" />