WPF MVVM Databinding - Проверьте наличие места и снимите флажок - PullRequest
1 голос
/ 24 ноября 2011

Я новичок в использовании шаблона MVVM в моем приложении WPF, и я попал в странную ситуацию. Я на самом деле пытаюсь сделать что-то похожее на Metainputtextbox здесь, на StackOverflow (когда вы пишете новый вопрос).

Итак, что я пытаюсь сделать:

У меня есть текстовое поле (doh!) И привязка его к свойству в моей viewModel. В свойстве set я проверяю пробел (''), если есть пробел, но он не пустой (имеется в виду мета-слово), я обрезаю его из пробелов и сохраняю в свою личную собственность. И вызывает updateProp. Теперь здесь начинается сложная часть. После того, как метаслово сохранено, я хочу очистить строку и текстовое поле, но установка моего свойства на "", конечно, вызовет все вокруг снова.

1007 * XAML *

<TextBox 
         Name="txtBoxMetaInput" 
         Text="{Binding Path=MetaInput, Mode=TwoWay,
         UpdateSourceTrigger=PropertyChanged}"/>

ViewModel

    private string metaInput { get; set; }
    public string MetaInput 
    {
        get {  return metaInput; }
        set 
        {
            if (value.Contains(' ') && String.IsNullOrEmpty(value) == false)
            {
                metaInput = value.Trim(' ');
                saveTheMetaKeyWordToAnArrayOfMetawords();
                this.OnPropertyChanged("MetaInput");
            }
        }
    }

Теперь не хватает того, что я хочу очистить текстовое поле и очистить свойства после сохранения его в массиве метаслов.

Эта проблема, вероятно, просто нуждается в новом взгляде на нее :)

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Теперь здесь начинается сложная часть. После того, как метаслово сохранено, я хочу очистить строку и текстовое поле, но установка моего свойства на "", конечно, вызовет все вокруг снова.

Просто установите вспомогательное поле (перед поднятием PropertyChanged), а не свойство. Это предотвратит «повторный запуск» значения.

0 голосов
/ 24 ноября 2011

Лучшим решением, вероятно, является использование преобразователя значений в привязке, который преобразует из string в string[] и обратно:

<local:TagConverter x:Key="TagConverter" />

<TextBox 
      Name="txtBoxMetaInput" 
      Text="{Binding Path=MetaInput, Mode=TwoWay,
      UpdateSourceTrigger=PropertyChanged, Converter={StaticResource TagConverter}}"/>

TagConverter - это класс, который вы пишете, который реализует IValueConverter. В Convert вы конвертируете из string в string[], разбивая на пробелы. В ConvertBack вы присоединяете string[] обратно к string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...