[英]Binding to TextBox only one-way
我需要将List<Key>
绑定到TextBox
。 我编写了一个将List<Key>
转换为字符串的转换器( ConvertBack
方法只会引发异常-未使用)。 问题是,当我尝试使用此转换器时,它显示了一个错误: “ IValueConverter”的TypeConverter不支持从字符串转换。 看来是由于尝试将string
从TextBox
转换为List<Key>,
但我不想这样做(用户不会“写入”此TextBox
)。 我已经考虑过使用TextBox
以外的其他东西-也许是TextBlock
,我认为它可以解决问题,但是出于某些其他原因,我想使用TextBox
。
我要绑定的属性:
public partial class Settings : Window
{
public List<Key> hotkeyCapture_keys { get; set; }
...
转换器:
class ListKeyToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return string.Join(" + ", (List<Key>)value);
}
...
和文本框:
<TextBox ... Text="{Binding hotkeyCapture_keys, Converter=ListKeyToStringConverter}" />
尝试对其进行构建时,该应用程序会立即关闭并显示“ XamlParseException created” 。
谁能告诉我如何解决这个问题?
谢谢
不知道这是否真的是您想要做的。 如果您想要一个只读的TextBox
那么已经有其他方法可以使用了。 您提到的一个是RichTextBox
。 但是我假设您知道您想要什么。
您首先要在Convert
使用它(不要忘记using System.Linq;
进行添加):
return string.Join(" + ", ((List<Key>)value).Select(x=> x.Name));
//where Name is a public property in type Key
其次-宾果,默认情况下TextBox.Text
绑定Mode=TwoWay
。 您可以将其更改为OneWay
或OneTime
:
<TextBox ... Text="{Binding hotkeyCapture_keys, Mode=OneTime, Converter=ListKeyToStringConverter}" />
另外,您将引发异常。 必须处理一些异常。 没有什么是。 无需在ConvertBack
引发异常,只需调用return null;
将您在转换器中的返回值更改为
return String.Join(" + ", ((List<Key>)value).ToArray());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.