【发布时间】:2019-01-14 20:36:40
【问题描述】:
我有一个 WPF 数据网格(我实际上使用的是 Xceed DataGrid,但我认为绑定仍然有效)。我的网格中有一个 DatePicker 列,但是当我选择一个日期时,它不会更新我的基础数据源。有什么想法吗?
我已经试过了:
{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}
{Binding Path=., Mode=TwoWay}
{Binding Path=., UpdateSourceTrigger=PropertyChanged}
{Binding Path=.}
{Binding .}
{Binding}
XAML:
<xcdg:Column FieldName="NeedDateOverride" Title="NEED DATE (OVERRIDE)" Width="100">
<xcdg:Column.CellContentTemplate>
<DataTemplate x:Name="needDateOverrideTemplate">
<DockPanel HorizontalAlignment="Stretch" LastChildFill="True">
<DatePicker SelectedDate="{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedDateChanged="NeedDateOverride_SelectedDateChanged" PreviewMouseDown="NeedDateOverride_GotFocus" CalendarOpened="NeedDateOverride_CalendarOpened"></DatePicker>
</DockPanel>
</DataTemplate>
</xcdg:Column.CellContentTemplate>
</xcdg:Column>
C#:
public DateTime NeedDateOverride
{
get
{
return this.needDateOverrideValue;
}
set
{
if (value != this.needDateOverrideValue)
{
this.needDateOverrideValue = value;
NotifyPropertyChanged();
}
}
}
【问题讨论】:
-
尝试指定相对来源。当我遇到这样的问题时,我尝试了相对来源并且它有效。 {Binding Path=.,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type YourAncestor}}} 抱歉,如果语法错误,我正在输入。也不确定您的 PropertyChanged。通常我使用 PropertyChanged 实现,它的名称类似于 NotifyPropertyChanged("needDateOverrideValue");
-
您单元格的
DataContext是该行对应的对象。所以{Binding NeedDateOverride, ...}应该可以工作,如果我错了请纠正我并添加更多信息:你的DataGrid的来源是什么/NeedDateOverride在哪里定义/等等