私は自分自身にいくつかの.NETプログラミングを教えています。現在、WPFでタグクラウドコントロールを構築しようとしています。目的は、最初のリストボックスが "ContactLists"のリストを表示し、2番目のリストボックスがContactListsに関連付けられた "ラベル"(またはタグ)を表示するウィンドウに2つのリストボックスを持つことです。ラベルの目的は、IValueConverterを使用してitemCountにフォントサイズをバインドすることです。コレクションに数回出現する特定のラベルがある場合、ラベルリストボックスに大きなフォントで表示されます。また、私はDB2データベースからコントロールを移入しています。IValueConverterデータバインディング
私はコンタクトリストとラベルを正しいリストボックスに表示していますが、バインディングに問題があります。私はチュートリアルから取ったコンバータークラスを使用しています。誰かが私にこの作業を手助けできるかどうか疑問に思っていました。多くの感謝 - ベン
プロパティ
public class Label
{
public int LabelID { get; set; }
public string LabelName { get; set; }
}
ContactListClass
public class ContactList
{
public string ContactListName { get; set; }
public List<Label> Labels { get; set; }
}
コンバータ
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;
int count = (int)value;
return ((minFontSize + count + increment) < maxFontSize) ?
(minFontSize + count + increment) :
maxFontSize;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
ウィンドウLoadedイベント
private void Window_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
//TODO: Add event handler implementation here.
ListCollectionView lcv = new ListCollectionView(myLabels);
lcv.GroupDescriptions.Add(new PropertyGroupDescription("LabelName"));
tagsList.ItemsSource = lcv.Groups;
}
XAML
<Window.Resources>
<local:CountToFontSizeConverter x:Key="CountToFontSizeConverter"/>
<Style x:Key="tagsStyle" TargetType="{x:Type ListBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBox}">
<Grid>
<Border x:Name="Border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"/>
<WrapPanel Orientation="Horizontal"
Margin="2"
IsItemsHost="true"
Background="#FFFCF6F6"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<DataTemplate x:Key="ContactsTemplate">
<WrapPanel>
<TextBlock TextWrapping="Wrap"
Text="{Binding ContactListName, Mode=Default}"/>
</WrapPanel>
</DataTemplate>
<DataTemplate x:Key="TagsTemplate">
<WrapPanel>
<TextBlock Text="{Binding LabelName, Mode=Default}"
TextWrapping="Wrap"
FontSize="{Binding ItemCount,
Converter={StaticResource CountToFontSizeConverter},
Mode=Default}"
Foreground="#FF0D0AF7"/>
</WrapPanel>
</DataTemplate>
</Window.Resources>
<Grid x:Name="LayoutRoot" Background="#FFCBD5E6">
<ListBox x:Name="contactsList"
SelectionMode="Multiple"
Margin="7,8,0,7"
ItemsSource="{Binding ContactLists, Mode=Default}"
ItemTemplate="{DynamicResource ContactsTemplate}"
HorizontalAlignment="Left"
Width="254"/>
<ListBox x:Name="tagsList"
Margin="293,8,8,8"
ItemsSource="{Binding Labels, Mode=Default}"
ItemTemplate="{StaticResource TagsTemplate}"
Style="{StaticResource tagsStyle}" />
</Grid>
FYI - あなたの質問をより読みやすくするために再フォーマットしました。最初は、私はこのすべてのものがそこにあったことを知らなかった。将来的には、読みやすい形式で記事を投稿すれば、回答を得る可能性は非常に高くなります。これがあなた自身のコードからコピー貼り付けされたものだったならば、あなたもそこで何らかのフォーマットをすることを謙虚にお勧めします。そのコードをとても簡単に保つことができます。 –