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();