2015-09-07 5 views
1

У меня есть текстовое поле с использованием множественного связывания. Поля, используемые для этого мульти связывания являются свойством, поступающим из моей модели представления данныхРедактирование текстового поля с использованием множественного связывания

<TextBox> 
    <TextBox.Text> 
     <MultiBinding StringFormat="{}{0} {1}"> 
      <Binding Path="FirstProperty" /> 
      <Binding Path="SecondProperty" /> 
     </MultiBinding> 
    </TextBox.Text> 
</TextBox> 

Я хотел бы, чтобы это поведение, позволяя пользователь обновить содержимое; Затем я получал содержимое текстового поля в моей модели представления данных.

Возможно ли это?

+0

возможно дубликат [как изменить текстовое поле WPF, который использует MultiBinding и string.format?] (HTTP: // stackoverflow.com/questions/8142583/how-to-edit-a-wpf-textbox-which-uses-multibinding-and-string-format) – pangabiMC

ответ

1

В то время как ссылка, которую pangabiMC указывает на использование конвертера, я лично сам не буду, легче и отлаживать, и тестировать модуль, если вы поместите это поведение в модель представления. Просто создать отдельное свойство для вашего текстового поля (CombinedProperty) и держать его синхронизируются с исходными свойствами:

public class YourViewModel : ViewModelBase 
{ 
    private string _FirstProperty = ""; 
    public string FirstProperty 
    { 
     get { return this._FirstProperty; } 
     set 
     { 
      this._FirstProperty = value; 
      RaisePropertyChanged(() => this.FirstProperty); 
      UpdateCombinedProperty(); 
     } 
    } 

    private string _SecondProperty = ""; 
    public string SecondProperty 
    { 
     get { return this._SecondProperty; } 
     set 
     { 
      this._SecondProperty = value; 
      RaisePropertyChanged(() => this.SecondProperty); 
      UpdateCombinedProperty(); 
     } 
    } 

    private string _CombinedProperty = ""; 
    public string CombinedProperty 
    { 
     get { return this._CombinedProperty; } 
     set 
     { 
      this._CombinedProperty = value; 
      RaisePropertyChanged(() => this.CombinedProperty); 
      UpdateSourceProperties(); 
     } 
    } 

    private void UpdateCombinedProperty() 
    { 
     this.CombinedProperty = this.FirstProperty + " " + this.SecondProperty; 
    } 

    private void UpdateSourceProperties() 
    { 
     var fields = this.CombinedProperty.Split(' '); 
     if (fields.Length != 2) 
      return; // should handle validation properly 
     this.FirstProperty = fields[0]; 
     this.SecondProperty = fields[1]; 
    } 

} 
+0

Эй, Марк, я пошел и смиренно редактировал ваш ответ, который отлично работает в моей дело. Спасибо, что взяли команду. – Louitbol

+0

@ Louitbol ваше редактирование находится в очереди просмотра, но оно может не пройти через из-за того, что вы изменили другой код, кроме исправления фактической ошибки. (Вероятно, из-за требования длины редактирования?) Если он отклонен, просто прокомментируйте необходимое изменение, чтобы Марк мог его исправить. – GalacticCowboy

+0

@GalacticCowboy Я считаю, что это связано с тем, что я впервые редактировал, не будучи подписанным. – Louitbol