仅单向绑定到TextBox

时间:2015-08-18 16:39:32

标签: c# wpf data-binding

我需要将List<Key>绑定到TextBox。我已经编写了一个转换器,它从List<Key>转换为字符串(ConvertBack方法只是抛出异常 - 它没有被使用)。问题是当我尝试使用这个转换器时,它会显示一个错误: TypeConverter for&#34; IValueConverter&#34;不支持从字符串转换。问题的出现是因为它试图将stringTextBox转换为List<Key>,,但我没有&#39 ; t想要那样做(用户赢了&#39; t&#34;写'#34;到这个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:

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

当尝试构建它时,应用程序会立即关闭&#34; XamlParseException出现&#34;

谁能告诉我如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:1)

不确定这是否真的是你想要做的事情。如果你想要一个只读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;

即可

答案 1 :(得分:0)

将转换器中的返回值更改为

 return String.Join(" + ", ((List<Key>)value).ToArray());
你可以看看 WPF textblock binding with List<string>