2010-02-20 2 views
2

Я хочу привязать ширину кнопки к текстовому значению текстового поля, хотя я хочу, чтобы всегда была ширина кнопки, что в два раза больше, чем написано в текстовом поле. Это:Databinding with WPF

textBox1.Text = 10 

установит

button1.Width = 20 

Могу ли я сделать это только через ValueConverters или есть другой способ сделать это?

Благодаря

ответ

1

Bindings, которые не являются простым назначением, то есть то, что значение конвертеров для. (Нет другого способа сделать это.)

2

Использование IValueConverter - это простое решение, но если вы этого не сделаете, вы можете попробовать привязать textbox1 и button1 к одной переменной. Например, предположим, что вы создали два элемента управления, как показано ниже, и привязаны к одной переменной ButtonText. Для простоты Содержимое кнопки будет изменено вместо Ширина кнопки.

В XAML:

<TextBox Text="{Binding ButtonText, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"/> 
<Button Content="{Binding ButtonText, Mode=OneWay}"/> 

В ViewModel:

public string ButtonText 
    { 
     get { return _buttonText; } 
     set 
     { 
      int result; 
      if (int.TryParse(value, out result)) 
       _buttonText = (result * 2).ToString(); 
      else 
       _buttonText = value; 

      OnPropertyChanged("ButtonText");   
     } 
    } 
    private string _buttonText; 

К сожалению, это решение не работает в .NET 4.0, так как способ .NET 4.0 обрабатывает OneWayToSource, как указано в этом article. В основном проблема заключается в том, что текстовое поле будет обновляться со значением ButtonText после того, как оно будет установлено текстовым полем, хотя его режим был настроен как «OneWayToSource». Это решение будет работать для .NET 3.5.

Чтобы обойти эту OneWayToSource вопрос в .NET 4.0, вы можете использовать BlockingConverter (тип IValueConverter), чтобы отделить каждый раз, когда используется ресурс и установить х: Shared = «False»,, как указано в этом article , Опять же, вы используете IValueConverter, но по крайней мере вы не используете его для изменения значения.