WPF可绑定依赖项属性不起作用

时间:2015-02-05 13:32:14

标签: c# wpf binding dependency-properties

我绑定如下:

views:SciChartUserControl Name="SciChartUserControl" Quotes="{Binding QuoteCollection}"></views:SciChartUserControl>

我确定QuoteCollection更新了,因为网格也绑定了它,我看到它已更新。我希望在SciChartUserControl视图的代码隐藏中收到通知,但{{1}永远不会被调用。这让我发疯,我已经尝试了几个小时的不同方式......我忽略了一些明显的东西?

QuotesPropertyChanged

编辑:我添加了托管public partial class SciChartUserControl : UserControl { private SciChartControlViewModel _viewModel; public SciChartUserControl() { //Set ViewModel Datacontext _viewModel = new SciChartControlViewModel(); DataContext = _viewModel; InitializeComponent(); } public static DependencyProperty QuotesProperty = DependencyProperty.Register("Quotes", typeof(List<Quote>), typeof(SciChartUserControl), new PropertyMetadata(QuotesPropertyChanged)); public List<Quote> Quotes { get { return (List<Quote>)GetValue(QuotesProperty); } set { SetValue(QuotesProperty, value); } } private static void QuotesPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { throw new NotImplementedException(); var quotes = (List<Quote>) e.NewValue; } } 的部分视图。

SciChartUserControl

3 个答案:

答案 0 :(得分:1)

尝试为PropertyMetadata类使用另一个构造函数:

public static DependencyProperty QuotesProperty = DependencyProperty.Register("Quotes", 
    typeof(List<Quote>), typeof(SciChartUserControl), 
    new PropertyMetadata(someDefaultvalue, QuotesPropertyChanged));

可能是您使用的PropertyChangedCallback对象的单个参数构造函数与采用单个object参数的对象混淆。

答案 1 :(得分:0)

试试这个...... 在依赖属性声明中将PropertyMetadata更改为以下..

new PropertyMetadata(null, new PropertyChangedCallback(QuotesPropertyChanged))

答案 2 :(得分:0)

我相信这是因为你已经在你的代码中设置了你的DataContext,我在XAML中设置时遇到了同样的问题?好像DependencyProperty是相对于UserControl的DataContext绑定的。 UserControl's DependencyProperty is null when UserControl has a DataContext

<views:SciChartUserControl Name="SciChartUserControl"
                           Quotes="{Binding DataContext.QuoteCollection, RelativeSource={RelativeSource AncestorType={x:Type dxdo:LayoutPanel}}}" />