我需要将List<Key>
绑定到TextBox
。我已经编写了一个转换器,它从List<Key>
转换为字符串(ConvertBack
方法只是抛出异常 - 它没有被使用)。问题是当我尝试使用这个转换器时,它会显示一个错误: TypeConverter for&#34; IValueConverter&#34;不支持从字符串转换。问题的出现是因为它试图将string
从TextBox
转换为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; 。
谁能告诉我如何解决这个问题?
由于
答案 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
。您可以将其更改为OneWay
或OneTime
:
<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>