繁体   English   中英

仅单向绑定到TextBox

[英]Binding to TextBox only one-way

我需要将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 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 您可以将其更改为OneWayOneTime

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

另外,您将引发异常。 必须处理一些异常。 没有什么是。 无需在ConvertBack引发异常,只需调用return null;

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

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

您可以看看使用List <string>的WPF文本块绑定

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM