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經歷並不那麼我敢肯定,我失去了一些東西?
我已將其更改爲FreezableCollection,但似乎仍無法正常工作。我不需要手動設置DataContext嗎? –
哦,忘了MyGridColumn ...你也必須改變基類到Freezable。和DataContext你只需要在你的窗口或包含MyGrid的UserControl上設置。它必須是具有ColumnToolTipDescriptions屬性的對象。 –