2012-06-28 58 views
1

我在我的主窗口類以下依賴屬性(從WPF的窗口會繼承)數據綁定到可觀察集合的屬性始終顯示15

public ObservableCollection<ComputerListItem> ActiveComputers 
     { 
      get { return (ObservableCollection<ComputerListItem>)this.GetValue(ActiveComputersProperty); } 
      set { this.SetValue(ActiveComputersProperty, value); } 
     } 

     public static readonly DependencyProperty ActiveComputersProperty = DependencyProperty.Register(
      "ActiveComputers", typeof(ObservableCollection<ComputerListItem>), typeof(MainWindow), new PropertyMetadata(new ObservableCollection<ComputerListItem>())); 

現在我想給一個標籤的ActiveComputers.Count值,以便在我的XAML我有這樣的:

<Window x:Class="ComputerManagerV3.MainWindow"   
     <!-- SNIP --> 
     DataContext="{Binding RelativeSource={RelativeSource Self}}" 
     > 
    <Grid> 
     <!--SNIP --> 
     <Label Name="labelActive" Content="{Binding Source=ActiveComputers, Path=Count}" ></Label> 

即使在現在設計的標籤顯示的值是15,因爲怪名單最初充滿13元。所以我添加了一些測試,無論可觀察集合中有多少項目,標籤始終顯示值15:/。輸出窗口中也沒有顯示綁定錯誤,所以我無能爲力。

我的問題:

  • 爲什麼總是15綁定表達式的值?
  • 我如何寫一個正確的綁定,使其始終顯示在列表
  • 項目的數量是否有可能在前面加上一些文字而不需要編寫值 轉換器自己?

回答

4

您的綁定的來源是文字string「ActiveComputers」,其中有15個字符。因此,您顯示字符串中的字符數,並且根本不連接到集合。

試試這個:

Content="{Binding ActiveComputers.Count}" 
+0

Ahhh我知道如何解決這個問題,但我看不到15來自哪裏。 +1 :) – Rachel

+0

來自15個來自哪裏的好通話,我真的無法弄清楚那個,最後很明顯:/。您對其他問題的建議也很好。 –

2

你是你Source屬性設置爲一個字符串,並String.Count是15

要正確綁定屬性,而不是使用:

<Label Name="labelActive" Content="{Binding ActiveComputers.Count, 
    RelativeSource={RelativeSource AncestorType={x:Type Window}}" /> 

至於您對文本格式的第三個問題,您可以使用ContentStringFormat屬性來格式化的內容

+0

感謝您與ContentStringFormat的鏈接,我知道必須有類似內建的內容。 –

1

有一個以上的問題在這裏:

1)在依賴產權登記,要傳遞相同的列表實例類的所有實例的屬性。

public static readonly DependencyProperty ActiveComputersProperty = 
    DependencyProperty.Register(
     "ActiveComputers", 
     typeof(ObservableCollection<ComputerListItem>), 
     typeof(MainWindow), 
     new PropertyMetadata(new ObservableCollection<ComputerListItem>())) 

取而代之的是使用默認值null註冊,並在類的構造函數中設置屬性。

2)綁定路徑錯誤。源應該是一條路徑。 ElementName用於從XAML中的給定名稱開始路徑。嘗試使用Rachel's suggestion ...

使用RelativeSource在窗口而不是DataSource處啓動路徑,然後使用ActiveComputers.Count作爲路徑。

+0

+1用於查看PropertyMetadata的問題,這可能會導致一些非常令人討厭且難以跟蹤錯誤/ –

+0

關於問題2,我沒有注意到你做了DataContext =「{Binding RelativeSource = {RelativeSource Self}}」。 –

相關問題