仅单向绑定到TextBox

本文关键字:TextBox 绑定 | 更新日期: 2023-09-27 18:08:37

我需要将List<Key>绑定到TextBox。我写了一个转换器,转换从List<Key>到字符串(ConvertBack方法只是抛出一个异常-它不使用)。问题是,当我尝试使用这个转换器时,它显示了一个错误:"IValueConverter"的TypeConverter不支持从字符串转换。似乎问题是由于它试图将stringTextBox转换为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

不确定这是否真的是您想要做的事情。如果你想要一个只读的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。您可以将其更改为OneWayOneTime:

<TextBox ... Text="{Binding hotkeyCapture_keys, Mode=OneTime, Converter=ListKeyToStringConverter}" />

同样,你抛出了一个异常。必须有东西处理这个异常。没有什么。而不是在ConvertBack中抛出异常,只需调用return null;

将转换器的返回值更改为

 return String.Join(" + ", ((List<Key>)value).ToArray());

你可以看一下WPF textblock与List

绑定