仅在更新文本块时运行的转换器
本文关键字:运行 转换器 更新 文本 | 更新日期: 2023-09-27 18:30:46
>转换器
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 更新后运行我的转换器。 它现在的工作方式是,一旦我使用日期选择器选择一个日期,它就会填充文本块中的日期/时间,但是当我单击保存时,转换器再次运行,这会改变时间。如何让此转换器仅在文本块更新时运行。我也知道转换器中的 if 测试需要更改,我只是在玩弄它,看看我是否可以让它工作
仅当Binding
认为有新值要绑定时,才会运行Converter
。我猜当您单击"保存"时会发生以下情况之一:
1:代码重置项的Start
属性:
item.Start = updatedDate;
*)这与您已经检查过的@nit的建议相同。
2:在项目集合中,替换刚刚保存的项目:
myList.Remove(oldItem);
myList.Add(updatedItem);
3:替换绑定到DataGrid
的整个项目列表;
myGrid.ItemsSource = updatedList;
正如 Sphinxxx 所写,当绑定认为值发生变化时,将调用转换器。
要做的一件事是检查您的保存方法,那里没有任何可能导致这种情况。
另一个选项是将 UpdateSourceTrigger 设置为 Explicit,然后在 DatePicker 中选择新日期后更新绑定。我猜想,如果你这样做,就不会发生预兆。显式更新是这样的(IsEnable 属性的绑定按钮示例):
BindingExpression be = MyButton.GetBindingExpression(Button.IsEnabledProperty);
be.UpdateTarget();