带有字典的列表视图
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>();
我的字典是这样的。
lvUsers.ItemsSource = Order_CONTROLS.ServiceData;
这就是我将数据分配给列表视图的方式
和 lvUsers 列表视图:
<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>
问题是它不会将数据打印到只有正确的项目,只有行数是正确的,但没有数据输出,任何人都可以告诉我做错了什么,如果可能的话不使用 LIST(T)?
解决方案是将 Values Collection 设置为 ListView 的 ItemsSource:
lvUsers.ItemsSource = Order_CONTROLS.ServiceData.Values;
还请记住,Dictionary 不可观察 -> INotifyCollectionChanged 和 INotifyPropertyChanged 接口未实现。
因此,如果您向字典添加新元素,您的视图将不会看到此更改。
您好,我正在寻找一种将列表视图与字典一起使用的方法。
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>();
我的字典是这样的。
lvUsers.ItemsSource = Order_CONTROLS.ServiceData;
这就是我将数据分配给列表视图的方式 和 lvUsers 列表视图:
<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>
问题是它不会将数据打印到只有正确的项目,只有行数是正确的,但没有数据输出,任何人都可以告诉我做错了什么,如果可能的话不使用 LIST(T)?
解决方案是将 Values Collection 设置为 ListView 的 ItemsSource:
lvUsers.ItemsSource = Order_CONTROLS.ServiceData.Values;
还请记住,Dictionary 不可观察 -> INotifyCollectionChanged 和 INotifyPropertyChanged 接口未实现。
因此,如果您向字典添加新元素,您的视图将不会看到此更改。