C# 带字典的列表视图

C# 带字典的列表视图,c#,wpf,listview,dictionary,listviewitem,C#,Wpf,Listview,Dictionary,Listviewitem,您好,我正在寻找一种将listview与Dictionary结合使用的方法 public class ServiceDataObject : IEquatable<ServiceDataObject> { public int ServiceID { get; set; } public string ServiceName { get; set; } public bool Status { get; set; } public string Reccome

您好,我正在寻找一种将listview与Dictionary结合使用的方法

public class ServiceDataObject : IEquatable<ServiceDataObject>
{
   public int ServiceID { get; set; }
   public string ServiceName { get; set; }
   public bool Status { get; set; }
   public string ReccomendedStatus { get; set; }
   public string WhoMade { get; set; }
   public bool Equals(ServiceDataObject other)
   {
       if (other == null) return false;
       return (this.ServiceID.Equals(other.ServiceID));
   }
}
public static Dictionary<int, ServiceDataObject> ServiceData = new Dictionary<int, ServiceDataObject>();
这就是我将数据分配给listview的方式 和LV用户列表视图:

<ListView Margin="10" Name="lvUsers">
    <ListView.View>
        <GridView>
           <GridViewColumn>
               <GridViewColumn.CellTemplate>
                   <DataTemplate>
                       <RadioButton IsChecked="{Binding Status}" GroupName="{Binding ServiceName}"/>
                   </DataTemplate>
              </GridViewColumn.CellTemplate>
          </GridViewColumn>
          <GridViewColumn>
              <GridViewColumn.CellTemplate>
                  <DataTemplate>
                      <DataTemplate.Resources>
                          <local:InvertBooleanConverter x:Key="InvertBooleanConverter" />
                      </DataTemplate.Resources>
                      <RadioButton IsChecked="{Binding Status, Converter={StaticResource InvertBooleanConverter}}"  GroupName="{Binding ServiceName}" />
                  </DataTemplate>
             </GridViewColumn.CellTemplate>
         </GridViewColumn>
         <GridViewColumn Header="Reccomendation" Width="120" DisplayMemberBinding="{Binding ReccomendedStatus}" />
         <GridViewColumn Header="Description" Width="50" DisplayMemberBinding="{Binding ServiceName}" />
     </GridView>
 </ListView.View>


问题是,它不会将数据打印到仅正确的项目,只有行数正确,但没有数据输出,有人能告诉我哪里做错了吗?如果可能,不使用列表(T)?

解决方案是将值设置为集合到ListView的项目源:

lvUsers.ItemsSource = Order_CONTROLS.ServiceData.Values;
还要记住,字典是不可见的->INotifyCollectionChanged&INotifyPropertyChanged接口没有实现


因此,如果向字典中添加新元素,视图将不会看到此更改

尝试lvUsers.ItemsSource=Order\u CONTROLS.ServiceData.Values;还要记住,字典是看不见的,它是有效的。谢谢你,我希望我能把你的评论作为答案。太好了!我加上它作为答案。记住接受它。如何理解它是不可见的?这意味着它没有实现INotifyCollectionChanged和INotifyPropertyChanged接口,例如,如果将新元素添加到词典中,视图将不会收到此新元素添加的通知。这意味着如果数据发生更改,则不会被注意到?这意味着如果将元素添加到词典中,视图将不会看到此新元素,因为不会触发CollectionChanged事件。如果您打算修改或执行类似操作,字典不是您的最佳选择。这不是问题,因为listview中的数据是用于阅读的。对于将来的使用,解决方法是什么?
lvUsers.ItemsSource = Order_CONTROLS.ServiceData.Values;