我是WPF的新手,所以请原谅我,如果我遗漏了一些明显的东西。我有一个问题,我有一个AggregatedLabels的集合,我试图将每个AggregatedLabel的ItemCount绑定到我的DataTemplate中的FontSize,以便如果AggregatedLabel的ItemCount很大,那么我的listBox中将显示更大的fontSize我正在努力的部分是与ValueConverter的绑定。有人可以帮忙吗?非常感谢!
XAML代码段
<DataTemplate x:Key="TagsTemplate">
<WrapPanel>
<TextBlock Text="{Binding Name, Mode=Default}"
TextWrapping="Wrap"
FontSize="{Binding ItemCount,
Converter={StaticResource CountToFontSizeConverter},
Mode=Default}"
Foreground="#FF0D0AF7"/>
</WrapPanel>
</DataTemplate>
<ListBox x:Name="tagsList"
ItemsSource="{Binding AggregatedLabels, Mode=Default}"
ItemTemplate="{StaticResource TagsTemplate}"
Style="{StaticResource tagsStyle}"
Margin="200,10,16.171,11.88" />
答案 0 :(得分:2)
在你的CollectionView
到位的情况下,你可以绑定到Groups
属性,我从未使用过它,会尝试并尽可能澄清......
编辑:好的,这是一种方法:
绑定到的数据必须是CollectionView.Groups
,CollectionView
应该像这样定义:
CollectionView view = (ListCollectionView) CollectionViewSource.
GetDefaultView(LabelData);
view.GroupDescriptions.Add(new PropertyGroupDescription("Name"));
然后你可以在代码中绑定CollectionViewGroup
的各个属性,你需要的可能是:
ItemCount
Name
据说你的原始绑定应该有用。
注意:您只将一个值传递给转换器,即ItemCount,因此它应如下所示:
public class CountToFontSizeConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
const int minFontSize = 6;
const int maxFontSize = 38;
const int increment = 3;
if ((minFontSize + (int)value + increment) < maxFontSize)
{
return (double)(minFontSize + (int)value + increment);
}
return (double)maxFontSize;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
修改:进一步澄清......
只需将CollectionView
添加到您的ViewModel
作为属性,然后在其构造函数中创建它:
public class TagCloudViewModel//:INotifyPropertyChanged
{
public ObservableCollection<AggregatedLabelModel> AggregatedLabels
{get; set;}
public CollectionView AggregatedLabelsView {get; set;} // <-This...
public TagCloudViewModel()
{
var data = new DataAccess();
AggregatedLabels = data.GetData();
//...and this:
AggregatedLabelsView = (ListCollectionView)CollectionViewSource.
GetDefaultView(AggregatedLabels);
AggregatedLabelsView.GroupDescriptions.Add(
new PropertyGroupDescription("Name"));
}
}
然后绑定到AggregatedLabelsView.Groups
。