我开始使用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?
答案 0 :(得分:1)
您应该能够绑定到词典 - 或者实际上绑定到任何IEnumerable
。
如果您绑定到词典本身(而不是Values
),那么您需要编写项目绑定,以便他们了解KeyValuePair - 例如所以你可能需要绑定到Key.Name
而不是Name
。
但是,Dictionary本身不通知侦听器更改 - 因此使用Dictionary就像使用List一样 - 而不是使用ObservableCollection。如果您想要这种类型的行为,那么您将需要编写或查找实现INotifyCollectionChanged的Dictionary类。