Как редактировать текстовое поле WPF, которое использует multibinding и string.format? - PullRequest
3 голосов
/ 16 ноября 2011

У меня есть следующий код.

Отображает данные в следующем формате H: M: S. Я хотел бы отредактировать эти значения ... и хотел бы получать уведомления в viewmodel.

Как мне этого добиться?

Любая помощь будет оценена. Спасибо

  <TextBox  DataContext="{Binding UpdateSourceTrigger=PropertyChanged}" >
                            <TextBox.Text>
                                <MultiBinding StringFormat=" {0}:{1}:{2}">
                                <Binding Path="ValueH" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" />
                                <Binding Path="ValueM" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"  />
                                <Binding Path="ValueS" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"  />
                            </MultiBinding>
                        </TextBox.Text>
                        </TextBox>

1 Ответ

2 голосов
/ 16 ноября 2011

Привязка StringFormat является односторонней

Вам нужно написать собственный многозначный преобразователь, который также реализует метод ConvertBack.

Очень упрощенный конвертер будет что-то вроде ниже. Вам нужно будет добавить проверку ошибок, и, несомненно, нет лучшего способа конвертировать обратно (возможно, с помощью регулярного выражения). Кроме того, я не уверен, что правильно понял бит DateTime, но он дает вам отправную точку.

public class TimeConverter : IMultiValueConverter
 {
   public object Convert(object[] values, Type targetType, object parameter, 
      System.Globalization.CultureInfo culture)
   {
     return string.Format("{0}:{1}:{2}",values[0],values[1],values[2]);       }

  public object[] ConvertBack(object value, Type[] targetTypes, object parameter, 
      System.Globalization.CultureInfo culture)
   {
     var date=DateTime.Parse((string)value);
     return new object[] { date.Hours,date.Minutes,date.Seconds };

   }
 }
...