Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF可绑定依赖项属性不工作_C#_Wpf_Binding_Dependency Properties - Fatal编程技术网

C# WPF可绑定依赖项属性不工作

C# WPF可绑定依赖项属性不工作,c#,wpf,binding,dependency-properties,C#,Wpf,Binding,Dependency Properties,本人声明如下: views:SciChartUserControl Name="SciChartUserControl" Quotes="{Binding QuoteCollection}"></views:SciChartUserControl> EDIT:我添加了承载SciChartUserControl的部分视图 <dxdo:LayoutPanel Caption="Time Series Visualization">

本人声明如下:

views:SciChartUserControl Name="SciChartUserControl" Quotes="{Binding QuoteCollection}"></views:SciChartUserControl>
EDIT:我添加了承载
SciChartUserControl
的部分视图

 <dxdo:LayoutPanel Caption="Time Series Visualization">

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

                    </dxdo:LayoutPanel>

                    <dxdo:LayoutPanel Caption="Time Series Data">
                        <dxg:GridControl Name="SampleDataGridControl" ItemsSource="{Binding QuoteCollection}" AutoGenerateColumns="AddNew" EnableSmartColumnsGeneration="True" AutoGeneratedColumns="SampleDataGridControl_OnAutoGeneratedColumns">
                            <dxg:GridControl.View>
                                <dxg:TableView AllowEditing="False" AutoWidth="True" BestFitArea="All" AllowBestFit="True" ShowGroupPanel="True" ShowSearchPanelMode="Always"/>
                            </dxg:GridControl.View>
                        </dxg:GridControl>
                    </dxdo:LayoutPanel>

试试这个。。。 在依赖项属性声明中,将PropertyMetadata更改为以下内容

new PropertyMetadata(null, new PropertyChangedCallback(QuotesPropertyChanged))

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

public static DependencyProperty QuotesProperty = DependencyProperty.Register("Quotes", 
    typeof(List<Quote>), typeof(SciChartUserControl), 
    new PropertyMetadata(someDefaultvalue, QuotesPropertyChanged));
公共静态DependencyProperty QuoteProperty=DependencyProperty.Register(“引号”), typeof(列表),typeof(SciChartUserControl), 新属性元数据(someDefaultvalue,QuotesPropertyChanged));
可能是接受您正在使用的
PropertyChangedCallback
对象的单参数构造函数与接受单个
对象的构造函数混淆了。

我相信这是因为您在代码中设置了DataContext,我在XAML中设置它时遇到了相同的问题?似乎一个DependencyProperty是相对于UserControl的DataContext绑定的



So
QuoteCollection
是类
SciChartControlViewModel
的属性,它在SciChartControlViewModel构造函数中初始化?您也可以向我们展示SciChartControlViewModel代码。不,我将SciChartControl托管在不同的WPF UserControl中。viewmodel实际上包含一个QuoteCollection。我编辑了我的问题并添加了部分视图,以显示另一个控件也绑定到QuoteCollection,并且更新得很好。但是不要在SciChartUserControl的构造函数中设置DataContext。这将覆盖从父控件继承的DataContext。我需要访问视图模型,因为它应该作用于更新的
引号
。否则我将如何访问视图模型?当您说您正在另一个WPF UserControl中托管SciChartControl时,我的假设是DataContext(保存视图模型对象)由该外部控件继承。不然你为什么要告诉我们?无论如何,这里的情况似乎不是这样。哈,你搞定了。但这怎么可能呢?我想理解为什么这会产生所有的不同。只有在我不在代码中设置datacontext的情况下,这才有效。但是,我无法在视图模型中反映更新后的
QuoteCollection
。怎么办?谢谢。这是可能的,因为一个构造函数需要类型为
PropertyChangedCallback
的对象,而另一个构造函数需要类型为
object
的对象。编译器试图将您的调用映射到正确的构造函数,但由于
quotePropertyChanged
方法实际上不是
PropertyChangedCallback
对象,因此它选择了单个
对象
默认值参数构造函数,因此您有了方法的默认值。这是微软的糟糕编程,不是你的。怎么做呢?。。。尝试使用而不是设置
DataContext
@Sheridan为什么QuotesPropertyChanged不应该是PropertyChangedCallback?它有正确的签名。我从来没有注意到,我的编译器在编写
新的PropertyMetadata(CallbackMethod)
时不会选择正确的PropertyMetadata构造函数“似乎一个DependencyProperty是相对于UserControl的DataContext绑定的”。什么?当然,它会这样做,除非您显式地设置绑定的源或相对源。这就是DataContext属性的确切用途。@Clemens您是正确的(显然),这就是当前的问题(imo)以及我的解决方案所解决的问题。然而,我并不认为这是普遍理解的。作为证据,我的问题被否决了,两周没有得到答复?当然,社区知道我们可以将UserControl中的元素绑定到UserControl的DataContext,例如,TextBox的Text属性将绑定到其继承的DataContext。我们很少做的是绑定到UserControl本身的属性。
public static DependencyProperty QuotesProperty = DependencyProperty.Register("Quotes", 
    typeof(List<Quote>), typeof(SciChartUserControl), 
    new PropertyMetadata(someDefaultvalue, QuotesPropertyChanged));
<views:SciChartUserControl Name="SciChartUserControl"
                           Quotes="{Binding DataContext.QuoteCollection, RelativeSource={RelativeSource AncestorType={x:Type dxdo:LayoutPanel}}}" />