2011-02-10 19 views
3

我試圖獲得一個綁定,以便在用戶控件的子對象上工作。 XAML中看起來是這樣的:用戶控件的子依賴項對象上的綁定不起作用

<MyGrid> 
    <MyColumn ExtendedColumnData="{Binding ColumnToolTipDescriptions}"/> 
</MyGrid> 

這裏是如何的類定義:

[ContentProperty("Columns")] 
public class MyGrid : UserControl 
{ 
    private MyColumnCollection _columns; 

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("Data")] 
    public MyColumnCollection Columns 
    { 
     get 
     { 
      if (_columns == null) 
       _columns = new MyColumnCollection(); 

      return _columns; 
     } 
    } 
} 

public class MyColumnCollection : ObservableCollection<MyGridColumn> 
{ 
} 

public class MyGridColumn : DependencyObject 
{ 
    public object ExtendedColumnData 
    { 
     get { return (object)GetValue(ExtendedColumnDataProperty); } 
     set { SetValue(ExtendedColumnDataProperty, value); } 
    } 

    public static readonly DependencyProperty ExtendedColumnDataProperty = 
     DependencyProperty.Register("ExtendedColumnData", typeof(object), typeof(MyGridColumn), new UIPropertyMetadata(null)); 
} 

從我所知道的,結合甚至沒有試圖獲取數據,因爲我已經試圖把一個轉換器反對綁定,並且轉換方法上的斷點永遠不會被命中。

我正在使用MVVM模式,因此窗口的DataContext屬性設置爲視圖模型。

我讀過關於這裏是一些其他的問題,並試圖結合,例如不同的排列:

<MyColumn ExtendedColumnData="{Binding DataContext.ColumnToolTipDescriptions, ElementName=MyViewName}" /> 
<MyColumn ExtendedColumnData="{Binding DataContext.ColumnToolTipDescriptions, RelativeSource={RelativeSource AncestorType={x:Type local:MyView}}" /> 

但仍沒有運氣,綁定不火!惱人的是,這似乎很好地工作(如果我的屬性添加到網格):

<MyGrid ExtendedColumnData="{Binding ColumnToolTipDescriptions}"> 
    <MyColumn /> 
</MyGrid> 

我與WPF經歷並不那麼我敢肯定,我失去了一些東西?

回答

2

問題是MyColumnCollection沒有繼承數據上下文(控件的常規屬性不是繼承上下文的一部分)。如果你沒有數據上下文綁定將不起作用。

要解決該問題,請嘗試繼承MyColumnCollection而不是從ObservableCollection,而是從FreezableCollection(可凍結屬性是繼承上下文的一部分)。

+0

我已將其更改爲FreezableCollection,但似乎仍無法正常工作。我不需要手動設置DataContext嗎? –

+0

哦,忘了MyGridColumn ...你也必須改變基類到Freezable。和DataContext你只需要在你的窗口或包含MyGrid的UserControl上設置。它必須是具有ColumnToolTipDescriptions屬性的對象。 –

相關問題