0

转换器

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 测试需要更改我只是在玩它,看看我是否可以让它工作

4

2 回答 2

1

Converter仅当Binding认为有要绑定的新值时才运行。我猜当您单击“保存”时会发生以下情况之一:

1:您的代码重置项目的Start属性:

item.Start = updatedDate;

*) 这与您已经检查过的@nit 的建议相同。

2:在您的项目集合中,您替换刚刚保存的项目:

myList.Remove(oldItem);
myList.Add(updatedItem);

3:您替换绑定到的整个项目列表DataGrid

myGrid.ItemsSource = updatedList;
于 2013-09-09T18:44:59.783 回答
1

正如 Sphinxxx 所写,当 Binding 认为值发生变化时,将调用 Converter 。

要做的一件事是检查您的 Save 方法,那里没有任何可能导致这种情况的方法。

另一种选择是将 UpdateSourceTrigger 设置为 Explicit,然后在 DatePicker 中选择新日期后更新 Binding。我认为如果你这样做,问题就不会发生。点显式更新是这样的(带有 IsEnable 属性绑定的按钮示例):

    BindingExpression be = MyButton.GetBindingExpression(Button.IsEnabledProperty);
    be.UpdateTarget();
于 2013-09-10T06:19:09.807 回答