Связывание данных с WPF - PullRequest
2 голосов
/ 21 февраля 2010

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

textBox1.Text = 10

установит

button1.Width = 20

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

Использование 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, как указано в этой статье . По сути, проблема в том, что текстовое поле будет обновлено значением ButtonText после того, как оно будет установлено текстовым полем, хотя его режим был настроен как «OneWayToSource». Это решение будет работать для .NET 3.5.

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

1 голос
/ 21 февраля 2010

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

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