我想将按钮的宽度绑定到某个文本框的文本值,尽管我希望按钮的宽度始终是文本框上写入的两倍。这是:
textBox1.Text = 10
将设置
button1.Width = 20
我是否只能通过ValueConverters执行此操作,还是有其他方法可以执行此操作?
由于
答案 0 :(得分:2)
使用IValueConverter是一个简单的解决方案,但如果您不希望这样做,那么您可以尝试使用单个变量绑定textbox1和button1。例如,假设您已经创建了两个控件,如下所示,并绑定到一个名为ButtonText的变量中。为简单起见,该按钮的 Content 将被修改,而不是按钮的 Width 。
在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。
要解决.NET 4.0中的OneWayToSource问题,您可以使用BlockingConverter(IValueConverter类型)在每次使用资源时将其分开,并将 x:Shared =“False”,设置为在article中说明。然后再次使用IValueConverter,但至少你没有使用它来修改值。
答案 1 :(得分:1)
不是简单赋值的绑定,即转换器的用途。 (别无他法。)