C# 转换器仅在更新textblock时运行

C# 转换器仅在更新textblock时运行,c#,wpf,xaml,wpf-controls,C#,Wpf,Xaml,Wpf Controls,转换器 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(" "));

转换器

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



如何仅在更新texblock时运行我的转换器。它现在的工作方式是,一旦我用日期选择器选择了一个日期,它就会填充文本块中的日期/时间,但当我单击“保存”时,转换器会再次运行,这会改变时间。如何使此转换器仅在更新textblock时运行。另外,我知道转换器中的if测试需要更改,我只是在玩弄它,看看是否可以让它工作

只有当
绑定
认为有新值要绑定时,
转换器才会运行。
我猜当您单击“保存”时会出现以下情况之一:

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

item.Start = updatedDate;
*)这与@nit的建议相同,您已经检查过了

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

myList.Remove(oldItem);
myList.Add(updatedItem);
3:替换绑定到
数据网格的整个项目列表

myGrid.ItemsSource = updatedList;

正如Sphinxxx所写,当绑定认为值发生变化时,就会调用转换器

要做的一件事是检查Save方法,确保没有任何可能导致这种情况的因素

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


我的应用程序中有一个保存按钮,可以将数据保存回sql,但每次我点击它,它都会重新运行转换器。我想我需要一个if测试来检查数据是否被修改,但我不知道如何在转换器内部编写该测试,因为我不知道要测试什么,因为当您单击“保存”时,如果正在调用属性Start的setter,则会触发propertychanged?这是我首先查看的内容之一,但我没有看到任何内容。还有什么我可以试试的吗?
myGrid.ItemsSource = updatedList;
    BindingExpression be = MyButton.GetBindingExpression(Button.IsEnabledProperty);
    be.UpdateTarget();