【发布时间】:2016-03-19 01:02:29
【问题描述】:
相关:Binding 3 textboxes together; same DateTime different format
我有三个textboxes,都应该在同一个日期绑定在一起。其中两个具有正常的字符串格式。第三个的特定格式为yyyy,jjj/HHmmss。我不知道如何将这个 textbox 绑定到我拥有的自定义格式,并且如果我更改其中的任何日期值,另一个 textboxes 将更新,反之亦然。
private DateTime _dateInViewModel;
public DateTime DateInViewModel
{
get { return _dateInViewModel; }
set
{
_dateInViewModel = value;
NotifyPropertyChanged("DateInViewModel");
}
}
<TextBox Name="SDate1" Text="{Binding DateInViewModel, StringFormat='MM/dd/yyyy'}" />
<TextBox Name="SDate2" Text="{Binding DateInViewModel}" />
<TextBox Name="STime1" Text="{Binding DateInViewModel, StringFormat='hh:mm:ss'}" />
自定义格式可以如下:
format = String.Format("{0},{1}/{2}",
DateInViewModel.Year,
DateInViewModel.DayOfYear.ToString("d3"),
DateInViewModel.ToString("HHmmss"));
目前,只有SDate1 和STime1 可以正确绑定并在对方更改时更新。
我做了一个转换器。当 SDate1 和 STime1 更改时,它会正确更新 SDate2,但在编辑 SDate2 以更新其他时不起作用。
public class DateTimeConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
DateTime test = (DateTime)value;
string date = String.Format("{0},{1}/{2}",
test.Year,
test.DayOfYear.ToString("d3"),
test.ToString("HHmmss"));
return (date);
}
return string.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
【问题讨论】:
-
您展示的是尝试从部分构造字符串,不实现自定义格式。如果你可以创建返回你想要的格式字符串,你可以把它放在绑定中
-
等等,我可以把上面的
string.format放在xaml 中??我没想到我可以把DateTime之类的.Year, .DayOfYear等方法放在xaml中。 -
不,您对 String.Format 所做的实际上是从 3 个不同的值创建一个字符串。我看到问题是 DateOfYear,这意味着您无法创建这样的格式字符串。正如其他人回答的那样,如果您希望解析文本框数据并更新 ViewModel,则需要 ConvertBack 方法
标签: c# wpf string-formatting date-formatting