JonZ
JonZ

Reputation: 149

ListView with Dictionary

Hello I'm looking for a way to use listview with 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>();

This is how my dictionary looks like.

lvUsers.ItemsSource = Order_CONTROLS.ServiceData;

This is how I assign data to listview And lvUsers listview:

<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>

Problem is that it does not print data to items only correct, only number of rows are correct, but no data output, can anyone tell what I did wrong and if possible without using LIST(T)?

Upvotes: 0

Views: 1946

Answers (1)

Babbillumpa
Babbillumpa

Reputation: 1864

The solution is to set Values Collection to ItemsSource of the ListView:

lvUsers.ItemsSource = Order_CONTROLS.ServiceData.Values;

Remember also that Dictionary isn't Observable -> INotifyCollectionChanged & INotifyPropertyChanged interfaces aren't implemented.

So if you add a new element to the dictionary, your view will not see this change.

Upvotes: 1

Related Questions