有没有办法在mvvmcross中绑定一个字典

时间:2014-06-20 13:22:15

标签: mvvmcross

我开始使用observable ConcurrentDictionary,因为它是线程安全的。但现在我遇到了如何将其绑定到列表的问题。

local:MvxBind="ItemsSource SourceDictionary" 

显然无法工作,因为item包含KeyValuePair而不是对象本身。

local:MvxBind="ItemsSource SourceDictionary.Values"

不起作用。我必须承认,这让我很困惑。 我甚至尝试过远射并做了一些转换器:

public class SourceDictionaryValueConverter : MvxValueConverter<KeyValuePair<string, SourceClass >, SourceClass >
{
    protected override SourceClass Convert(KeyValuePair<string, SourceClass> value, Type targetType, object parameter, CultureInfo culture)
    {
        return value.Value;
    }
}

并像这样绑定

local:MvxBind="ItemsSource SourceDictionary, Converter=SourceDictionary"

但它不起作用。我想它要求IList。 有没有办法将ListView绑定到Dictionary?

1 个答案:

答案 0 :(得分:1)

您应该能够绑定到词典 - 或者实际上绑定到任何IEnumerable

如果您绑定到词典本身(而不是Values),那么您需要编写项目绑定,以便他们了解KeyValuePair - 例如所以你可能需要绑定到Key.Name而不是Name

但是,Dictionary本身通知侦听器更改 - 因此使用Dictionary就像使用List一样 - 而不是使用ObservableCollection。如果您想要这种类型的行为,那么您将需要编写或查找实现INotifyCollectionChanged的Dictionary类。