【问题标题】:Binding to TextBox only one-way仅单向绑定到 TextBox
【发布时间】:2015-08-18 16:39:32
【问题描述】:

我需要将List<Key> 绑定到TextBox。我编写了一个转换器,可以将List<Key> 转换为字符串(ConvertBack 方法只是抛出一个异常——它没有被使用)。问题是,当我尝试使用此转换器时,它向我显示一个错误:“IValueConverter”的 TypeConverter 不支持从字符串转换。看来问题是因为它正在尝试转换stringTextBoxList<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”

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

谢谢

【问题讨论】:

    标签: c# wpf data-binding


    【解决方案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;

    【讨论】:

    • 不幸的是,同样的问题发生了。
    【解决方案2】:

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

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

    你可以看看 WPF textblock binding with List<string>

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2011-01-28
      • 1970-01-01
      • 2014-06-03
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-04-22
      • 2011-05-25
      相关资源
      最近更新 更多