2014-09-09 2 views
2

У меня есть следующие текстовое поле:TextBox с TwoWay DataBinding (двойной) не позволяет Десятичный разделитель

<TextBox x:Name="VoorzieningBerging" 
     HorizontalAlignment="Right" TextChanged="SimulatieWijziging" 
     Margin="0,0,45,0" Width="60" Height="25"> 
    <TextBox.Text> 
     <Binding Path="VoorzieningParameters[0].Double" 
       ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged" 
       FallbackValue="0" Mode="OneWayToSource"> 
      <Binding.ValidationRules> 
       <src:DoubleValidation/> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

И в ViewModel:

VoorzieningParameters = new ObservableCollection<Parameter>(); 
VoorzieningParameters.Add(new Parameter() { Naam = "berging" }); 

Где Параметр класс с описанием (НААМ) и double для значения.

public class Parameter 
{ 
    public Parameter() 
    { 

    } 

    public string Naam { get; set; } 
    public double? Double { get; set; } 
} 

Это работает отлично, я ввожу данные в текстовом поле, и когда я нажимаю кнопку сохранить I цикл через все «Параметры» в моем ObservableCollection и записать их в XML. Однако теперь я хочу сделать кнопку загрузки, но вместо того, чтобы записывать значения в текстовые поля, я хотел бы просто установить параметры в режиме просмотра и вместо этого использовать привязку TwoWay. Однако, когда я меняю режим привязки на TwoWay, текстовое поле больше не принимает разделитель десятичных чисел (, или.). При попытке ввода 7,0 это только 70.

ВОФК

Ive пытался использовать формат строки на Textbox, он затем позволяет Seperator, но когда я пытаюсь что-то вроде входа 7.0 становится 7.0.0

Как я решите эту проблему?

+1

TextBox.Text по умолчанию строки, попробуйте использовать конвертер, чтобы бросить это сделать двойной – Maximus

+0

Не могли бы вы дать мне пример? Я пробовал несколько конвертеров без успеха – user3692104

ответ

0

Когда вы устанавливаете привязку к двойному, он автоматически вызывает .ToString(), поэтому нет необходимости использовать Конвертер для отображения его значения в TextBox.Text. К сожалению, это не позволяет поставить '.' или ',', как вы описали. У меня есть пара решений

  1. Как вы сказали, что вы можете использовать StringFormat следующим образом, StringFormat = {} {0: 0,0}}, но тогда вы не можете писать 7.0, но писать только 7 или изменения числа после запятой.
  2. Второй подход заключается в том, чтобы изменить тип вашего имущества с двойного на строку. Тогда ввод «,» разрешен, но вам нужно будет его удвоить, если вы хотите его использовать.
  3. я столкнулся уже имеющимся решением, посмотрите here
+0

Да, вчера я решил это, изменив свойство на строки, для этого приложения это не очень важно, потому что я передаю свойство в XML, поэтому мне нужно преобразовать их в строку в любом случае, но для будущего использования. надеялся, что для этого будет лучшее решение. Спасибо за ваш вклад – user3692104

0

Для Вашего связывания, попробуйте добавить задержку. Я использую 300, вы можете использовать любое число. Это похоже на трюк для моих приложений.

Например:

<Binding Path="VoorzieningParameters[0].Double" 
        ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged" 
        Delay=300 
        FallbackValue="0" Mode="OneWayToSource"> 
Смежные вопросы