我正在製作自定義控件 - 特別是餅圖。我想要標記看起來像這個例子:WPF - 在自定義控件的內容項中使用數據綁定必須滿足哪些條件?
<c:PieChart>
<!-- These dependency properties are never set -->
<c:Slice Value="{Binding RedCount}" />
<c:Slice Value="{Binding BlueCount}" />
<c:Slice Value="{Binding GreenCount}" />
</c:PieChart>
PieChart
從Control
派生:
[ContentProperty("Slices")]
public class PieChart : Control
{
public PieChart()
{
Slices = new ObservableCollection<Slice>();
}
public ObservableCollection<Slice> Slices { get; private set; }
}
以上XAML導致與Slice
三個實例來填充Slices
財產。
這裏有一個片段從Slice
:
public class Slice : ContentControl
{
public static DependencyProperty ValueProperty
= DependencyProperty.Register(
"Value", typeof(double), typeof(Slice),
new PropertyMetadata((p,a) => ((Slice)p).OnValueChanged(a)));
private void OnValueChanged(DependencyPropertyChangedEventArgs e)
{
// This code never called!
}
}
的問題是上Slice
的Value
屬性從未設置。如果我將依賴屬性放在PieChart
上並複製綁定表達式,那麼該值就會被設置,所以我確信我理解了依賴屬性和綁定的基礎知識。
那麼,我必須做什麼來讓我的依賴項屬性設置子項上的值?由於這些項目都在我自己的集合中,它們是不是在邏輯樹中被任何魔術所認可的綁定工作?
一個簡單的'做這個'的答案會有幫助,但我真的很想知道這裏發生了什麼問題,所以我會接受發佈的最具洞察力和解釋性答案。
編輯我沒有說清楚,但有上包含的屬性RedCount
等。在過去的PieChart
的DataContext
一些環境對象,當我有一個綁定的路徑錯字(或者其他一些錯誤)我在運行時在VS輸出窗口中看到了警告。在這種情況下,我什麼都看不到。
再次閱讀問題後,我不認爲這些值首先來自PieChart類......這使得這完全沒有意義。別客氣。 – MojoFilter 2009-04-27 20:49:30