2011-05-01 57 views
3

我正試圖在WPF中基於an existing implementation [Download Source]構建標籤雲。我不完全理解實現,我的問題是,不是將FontSize綁定到集合中的項目數,而是想將它綁定到類中包含的其他值。所以在這裏這一部分,在WPF中構建標籤雲

FontSize="{Binding Path=ItemCount, Converter={StaticResource CountToFontSizeConverter}}" 

我想要將FontSize綁定到其他東西。我怎麼做? ItemCount屬於哪裏?

感謝

回答

2

ItemCount屬於group在從該Tag生成的集合視圖內。

例如如果我有一個列表

AABBBC

而且我組他們我得到:

A組:ItemCount中= 2
B組:ItemCount中= 3
C組: ItemCount = 1

標籤雲的整個要點是綁定到那個屬性,因爲你想要顯示某個標籤被使用的頻率。


爲了迴應您的意見,裸骨設置應該是這樣的:

<ItemsControl ItemsSource="{Binding Data}"> 
    <ItemsControl.Resources> 
     <vc:CountToFontSizeConverter x:Key="CountToFontSizeConverter"/> 
    </ItemsControl.Resources> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}" Margin="2" 
         FontSize="{Binding Count, Converter={StaticResource CountToFontSizeConverter}}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

我假設你的數據對象類公開屬性NameCount,以確保隨着數量的增加,數據對象類需要實現INotifyPropertyChanged這個大小就會隨着數量的增加而變化,這就是大約所有的要求。

public class Tag : INotifyPropertyChanged 
{ 
    private string _name = null; 
    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      if (_name != value) 
      { 
       _name = value; 
       OnPropertyChanged("Name"); 
      } 
     } 
    } 

    private int _count = 0; 
    public int Count 
    { 
     get { return _count; } 
     set 
     { 
      if (_count != value) 
      { 
       _count = value; 
       OnPropertyChanged("Count"); 
      } 
     } 
    } 

    //... 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

是的,但我已經有我的數據,我無法數數。我所擁有的更像是一個string-int類型的鍵值列表,我想用一個標籤雲來顯示帶有FontSize字符串的int值。 – user579674 2011-05-01 12:49:40

+0

然後你完全沒有使用該實現。你可以把它放到一個ItemsControl中並對其進行模板化。那麼,至少你不需要重寫轉換器,但是所有的分組魔法都是毫無意義的。 – 2011-05-01 12:52:32

+0

也許這是真的。有了您的建議,標籤雲仍然能夠隨列表更改而動態更新?你能解釋一下怎麼做嗎? – user579674 2011-05-01 12:57:18

0

ItemCount中是什麼情況包含在WPF的DataContext屬性對象的屬性,你想改變的字號。在層次結構樹中,從FrameworkElement開始的所有內容都繼承了「DataContext」屬性。

With "snoop"您可以在運行時查看WPF App的UI樹,找出在任何給定時間你的DataContext中有哪些對象存在。

+0

我不明白我在用snoop尋找什麼。我不能只將綁定路徑設置爲其他東西嗎?例如,我在我的主窗口中有一個整數列表? – user579674 2011-05-01 12:43:18