по теме: 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
связываются друг с другом должным образом и обновления, когда другой изменяется.
Я сделал преобразователь. Он правильно обновляет SDate2
, когда SDate1
и STime1
изменены, но не работают при редактировании 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. – pfinferno
no, что вы делаете с String.Format на самом деле создает строку из 3 разных значений. Я вижу, что проблема DateOfYear, а это значит, что вы просто не можете создать такую строку формата. Однако, как и другие, если вы хотите, чтобы данные текстового поля обрабатывались и обновляли ViewModel, вам нужен метод ConvertBack –