我有一个DataGrid,其ItemSource绑定到ICollectionView
(用于过滤)。我试图设置一个ComboBox,它将过滤DataGid中的EffectiveDate列,其DataSource中的所有当前可用行(其中还有其他过滤器)的ItemsSource(下拉值)应该是EffectiveDate。组合框只显示ICollectionView中唯一的字段值
下面的代码:
在主窗口:
<DataGrid Name="ProductsList"
ItemsSource="{Binding PricesView}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Sku}" Header="Sku"/>
<DataGridTextColumn Binding="{Binding Upc}" Header="UPC"/>
<DataGridTextColumn Binding="{Binding Cost}" Header="Cost"/>
<DataGridTextColumn Binding="{Binding Map}" Header="MAP"/>
<DataGridTextColumn Binding="{Binding List.EffectiveDate, StringFormat=d}" Header="List Effective Date"/>
<DataGridTextColumn Binding="{Binding List.Vendor.Name}" Header="Vendor"/>
</DataGrid.Columns>
</DataGrid>
<ComboBox ItemsSource="{Binding PricesView}" DisplayMemberPath="List.EffectiveDate"/>
在MainWIndowViewModel:
public ICollectionView PricesView { get; set; }
public ObservableCollection<Price> Prices { get; set; } = new ObservableCollection<Price>(DataAccess.GetVendorPricing());
public MainWIndowViewModel()
{
PricesView = CollectionViewSource.GetDefaultView(Prices);
}
价格商品类别:
012上述public class Price
{
public int Id { get; set; }
public PriceList List { get; set; }
public string Sku { get; set; }
public string Description { get; set; }
public string Upc { get; set; }
public double Cost { get; set; }
public double Map { get; set; }
}
List
是PriceList
类型:(这里就是你找到EffectiveDate
属性)
public class PriceList
{
public int Id { get; set; }
public Vendor Vendor { get; set; }
public string FileName { get; set; }
public DateTime EffectiveDate { get; set; }
}
的问题是对ComboBox带来了EffecitveDate每行(上千条! ),我需要的仅仅是独特的价值。
我试过this方法,使用IValueConverter
,问题是转换器需要在整个ICollectionView
没有DisplayMemberPath
,并返回整个集合不同的值(这基本上是一切),我后是不同的值只有这个特定的领域。
如何让ComboBox只显示EffectiveDate的唯一值?
P '完美!非常感谢! –