转换器
public object Convert(object values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values != null)
{
string t = values.ToString();
string date = t.Substring(0, t.IndexOf(" "));
string time = DateTime.Now.ToString("h:mm tt");
return (date + " " + time);
}
return string.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
=============================================== ===================================
XAML
<DataGridTemplateColumn Header="Start">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Start, Converter={StaticResource fixdate}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding Start}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
如何在texblock更新后才运行我的转换器。它现在的工作方式是我选择一个日期选择器的日期,它填充文本块中的日期/时间,但是当我点击保存时,转换器正在再次运行,这正在改变时间。如何才能使此Converter仅在文本块更新时运行。我也知道转换器中的测试是否需要更改我只是在玩它,看看我是否可以让它工作
答案 0 :(得分:1)
Converter
仅在Binding
认为存在要绑定的新值时运行。
我猜你单击“保存”时会出现其中一种情况:
1:您的代码重置了项目的Start
属性:
item.Start = updatedDate;
*)这与你已经检查过的@ nit的建议相同。
2:在您的项目集合中,您替换刚刚保存的项目:
myList.Remove(oldItem);
myList.Add(updatedItem);
3:替换绑定到DataGrid
;
myGrid.ItemsSource = updatedList;
答案 1 :(得分:1)
正如Sphinxxx所写,当Binding认为值发生变化时,会调用Converter。
要做的一件事就是检查你的Save方法,那里没有任何可能导致这种情况的方法。
另一个选项是将UpdateSourceTrigger设置为Explicit,然后在DatePicker中选择新日期后更新Binding。我认为如果你这样做,问题将不会发生。 Doint显式更新就是这样(一个带有IsEnable属性绑定的Button的例子):
BindingExpression be = MyButton.GetBindingExpression(Button.IsEnabledProperty);
be.UpdateTarget();