C# 首次加载视图时,DataTemplate内的绑定不起作用

C# 首次加载视图时,DataTemplate内的绑定不起作用,c#,wpf,data-binding,datatemplate,C#,Wpf,Data Binding,Datatemplate,我在试图绑定到视图模型中的属性的自定义控件上有一个依赖属性。控件位于视图中的DataTemplate内(aUserControl)。但是,绑定似乎只有在视图加载后绑定特性发生更改时才起作用 下面是视图XAML中的示例: <dxb:BarStaticItem Alignment="Far"> <dxb:BarStaticItem.ContentTemplate> <DataTemplate> <control

我在试图绑定到视图模型中的属性的自定义控件上有一个依赖属性。控件位于视图中的
DataTemplate
内(a
UserControl
)。但是,绑定似乎只有在视图加载后绑定特性发生更改时才起作用

下面是视图XAML中的示例:

<dxb:BarStaticItem Alignment="Far">
    <dxb:BarStaticItem.ContentTemplate>
        <DataTemplate>
            <controls:AllMaxDateRangeCombo Grid.Row="1"
                                           DateRange="{Binding DataContext.WorkOrderDateRange, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl}}"
                                           TimeFrameType="Current"
                                           Width="150" />
        </DataTemplate>
    </dxb:BarStaticItem.ContentTemplate>
</dxb:BarStaticItem>

BarStaticItem
是在工具栏中放置“普通”控件时使用的DevExpress控件。我在
AllMaxDateRangeCombo
中定义的绑定在首次加载视图时不起作用。但是在运行时(调试期间),如果要通过在属性名称的末尾添加一个数字来更改属性名称,然后立即删除该数字,那么绑定将开始工作

由于缺乏更好的理解,我只能说,在第一次加载时,绑定似乎没有正确地“连接”,或者它在某个部分准备好之前就尝试了。但当我在运行时进行更改时,它突然被链接起来

我希望有人能帮我弄清楚这里到底发生了什么

注意:使用Snoop工具,我可以看到控件的dependency属性
DateRange
在我进行运行时更改之前根本没有绑定。然后,出现一个绑定。所以无论出于什么原因,我定义的绑定都不会在第一次加载视图时启动


编辑:作为对一个问题的回答,我将解释一些机械原理。
AllMaxDateRangeCombo
基本上是一个组合框,包含诸如LastMonth、Today、LastWeek等选项。在进行选择时,将重新计算日期范围并将其分配给控件的
DateRange
依赖属性。因为这是我试图绑定到的属性,所以我希望UI视图模型的属性也会随之改变。然后我将响应并更新UI数据。但这种财产价值永远不会改变。因此,要么绑定从未真正连接,要么它不知何故无法通知更改。

这最终是由于控件中的值是如何更改的。在控件中,定义了此依赖项属性:

public static DependencyProperty DateRangeProperty = DependencyProperty.Register("DateRange", typeof(DateTimeRange), typeof(AllMaxDateRangeCombo), new PropertyMetadata(new DateTimeRange(DateTime.MinValue, DateTime.MaxValue)));
public DateTimeRange DateRange
{
    get => (DateTimeRange)GetValue(DateRangeProperty);
    set => SetValue(DateRangeProperty, value);
}
组合框选择更改后,将设置该值:

private void RecalculateDates()
{
    DateRange = new DateTimeRange(DateTime.MinValue, DateTime.MaxValue);
}
只要控件的使用不在
DataTemplate
中,就可以在双向绑定中正常工作。但一旦在
数据模板
中使用它,则只有此版本有效:

SetCurrentValue(DateRangeProperty, new DateTimeRange(DateTime.MinValue, DateTime.MaxValue));

我不知道答案,但我会投票赞成你的问题,因为我认为这是一个解释得很好的问题,我也想知道答案。PS:你能上传这个项目或者类似的东西吗(可能在githiub上)?如果我能下载它去除虫,那就太好了。最好的regards@AdrianEfford非常感谢。很遗憾,我无法上传。部分原因是因为它是一个巨大的项目,但也因为它是专有的工作。@DonBoitnott:你是说
DateRange
属性不是初始设置的吗?你是如何证实这一点的?
workOrderDaterRange
源属性的默认值是多少?您确定它与
DateRange
的默认值不同吗?@mm8它得到一个默认值,基本上是日期最小值/最大值。不,我想说的是,绑定似乎没有发生。控件类似于组合框,当进行选择(例如LastMonth)时,DateRange将相应地设置。我正试图响应这种变化并更新UI数据,但我的视图模型的属性从未改变,因此我认为绑定并没有真正连接起来。或者至少由于某种原因它不能通知。@DonBoitnott:如果你想让任何人指出原因,你需要提供一份关于这个问题的报告。