DataTemplate
2つのプロパティにバインドされた2 DatePickers
の列があります。これらのコントロールのデータが変更されたとき、私はスタートとによってのみが更新されるため、両方を更新した場合にのみ、最後の制御は、この場合データテンプレート列の最後のコントロールのみが更新されます
<sdk:DataGridTemplateColumn Width="300" CanUserReorder="False" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid MouseRightButtonDown="ActionsGrid_MouseRightButtonDown" Width="300" Height="40" MouseLeftButtonDown="ActionsGrid_MouseLeftButtonDown">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Stretch" Width="100" Text="{Binding Start, Converter={StaticResource DateConverter}}"
Padding="2" HorizontalAlignment="Center" />
<TextBlock VerticalAlignment="Stretch" Width="100" Text="{Binding Due, Converter={StaticResource DateConverter}}"
Padding="2" HorizontalAlignment="Center" />
</StackPanel>
</Grid>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
<sdk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<sdk:DatePicker VerticalAlignment="Top" Width="100" SelectedDate="{Binding Start, Mode=TwoWay,}" Padding="2" />
<sdk:DatePicker VerticalAlignment="Top" Width="100" SelectedDate="{Binding Due, Mode=TwoWay, ValidatesOnDataErrors=True}" Padding="2" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
に更新されます。また、結合作品罰金、私は私のモデルクラスでスタートにブレークポイントを入れてしまうと、それはヒットが、渡された値は、私が見つけたいくつかのデバッグした後にスタート
の元の値EDIT 1
あります場合は、その私は1つのコントロールを私の内部に持っていますDataTemplate
それはうまく動作します。また、私は日付を変更するときブレークポイントはすぐにヒットします。しかし、私が複数のコントロールを持っている場合、ブレークポイントは、カラムから外に出てから最後のバインディングだけが機能するまで、ヒットしません。
EDIT 2
私は唯一のCellTemplate
を使用して、細胞EditTemplate
<sdk:DataGridTemplateColumn Width="300" CanUserReorder="False" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<sdk:DatePicker VerticalAlignment="Top" Width="100" SelectedDate="{Binding Start, Mode=TwoWay,}" Padding="2" />
<sdk:DatePicker VerticalAlignment="Top" Width="100" SelectedDate="{Binding Due, Mode=TwoWay, ValidatesOnDataErrors=True}" Padding="2" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
EDIT 3
private void DatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
(sender as DatePicker).GetBindingExpression(DatePicker.SelectedDateProperty).UpdateSource();
}
を破棄した場合、それは正常に動作しますことに気づいたいくつかのmroeデバッグした後、私は両方のコントロールでバインディングをリフレッシュすることができましたselectedDatechange
イベントを受信し、送信者のバインディングを更新します。
2ウェイバインディングの作業がうまくいかない理由はまだわかりません。
これはなぜ起こっているのですか?
EDIT 4
モデルとプロパティ
public DateTime? Start
{
get { return _Start; }
set
{
_Start = value; Dirty = true;
if (_Start.HasValue && _Due.HasValue && _Start.Value > _Due.Value)
_dataErrors["Start"] = "Start date cannot be greater than the Due date";
else
if (_dataErrors.ContainsKey("Start"))
_dataErrors.Remove("Start");
NotifyPropertyChanged(); NotifyPropertyChanged("CalcStatus");
}
}
public DateTime? Due
{
get { return _Due; }
set
{
_Due = value; Dirty = true;
if (_Start.HasValue && _Due.HasValue && _Start.Value > _Due.Value)
_dataErrors["Start"] = "Start date cannot be greater than the Due date";
else
if (_dataErrors.ContainsKey("Start"))
_dataErrors.Remove("Start");
NotifyPropertyChanged("Due"); NotifyPropertyChanged("CalcStatus");
}
}
バインドされているビューモデルのプロパティを表示します。プロパティ変更通知を適切に実装していますか? – Nkosi
はい私は、ビューモデルINotifyPropertyChangedイベントを実装しています。テンプレートにコントロールが1つしかない場合は、どのプロパティにもバインドされていてもヒットしています。 2つ以上のコントロールの場合、最後のコントロールのみが更新されます。変わったことは、別のセルまたは列を選択して最後のコントロールのみを更新するときにNotifyPropertyChangedが呼び出され、他のプロパティもヒットしますが、渡された値は既存の値と同じです。 –
これがSilverlightの場合、WPFタグはなぜですか? :) BTWはUpdateSourceTrigger PropertyChangedをサポートしていますか? –