仅单向绑定到TextBox
本文关键字:TextBox 绑定 | 更新日期: 2023-09-27 18:08:37
我需要将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 occurred "。
谁能告诉我怎么解决这个问题?谢谢
不确定这是否真的是您想要做的事情。如果你想要一个只读的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());
你可以看一下WPF textblock与List