2

我有一个Dictionary<string,string>包含一些我想在ListView. 绝对“ListView看到”正确数量的项目(因为我从第二个中看到了适当数量的冒号TextBlock),但它不显示 theKeyValue绑定。

我需要一个Converter或什么?

我是否需要更改并改用 an ObservableCollection<KeyValuePair<string,string>>

<ListView Grid.Row="1" IsItemClickEnabled="False" 
          SelectionMode="None" IsHitTestVisible="False"
          IsSwipeEnabled="False"
          ItemsSource="{Binding SymbolInfoText}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Key}"/>
                <TextBlock Text=": "/>
                <TextBlock Text="{Binding Value}"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

public Dictionary<string, string> SymbolInfoText
{
    get
    {
        if (selectedItem == null)
        {
            return new Dictionary<string, string> { { "Error", "No Item Selected" } };
        }
        return selectedItem.GenerateObjectProperties(CurrentLocation, LocalMapManager.Map.Heading);
    }
}
4

2 回答 2

0

试试这个,它会告诉你你想要什么,但你使用它的方式不是在 WPF 中使用集合的正常方式

public partial class MainWindow : Window
{
    public MainWindow()
    {
        this.DataContext = this;
        InitializeComponent();

    }


    public Dictionary<string, string> SymbolInfoText
    {
        get
        {
            return new Dictionary<string, string> { { "Error", "No Item Selected" }, { "Error1", "No Item Selected" } };


        }
    }


}
于 2013-03-12T04:19:23.487 回答
0

如果您在事后添加项目(在启动应用程序并建立绑定链接之后),那么Dictionary<string,string>将不是最佳选择,因为它没有实现INotifyCollectionChanged. 将元素添加到字典后尝试设置ItemsSource正确,您会看到项目实际上出现在列表中,您只需要更新绑定即可。

所以是的,ObservableCollection<T>这将是一个更优化的解决方案,因为它会在核心集合发生更改时发送通知。

于 2013-03-12T03:47:53.677 回答