[英]Binding to TextBox only one-way
我需要將List<Key>
綁定到TextBox
。 我編寫了一個將List<Key>
轉換為字符串的轉換器( ConvertBack
方法只會引發異常-未使用)。 問題是,當我嘗試使用此轉換器時,它顯示了一個錯誤: “ IValueConverter”的TypeConverter不支持從字符串轉換。 看來是由於嘗試將string
從TextBox
轉換為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
。 您可以將其更改為OneWay
或OneTime
:
<TextBox ... Text="{Binding hotkeyCapture_keys, Mode=OneTime, Converter=ListKeyToStringConverter}" />
另外,您將引發異常。 必須處理一些異常。 沒有什么是。 無需在ConvertBack
引發異常,只需調用return null;
將您在轉換器中的返回值更改為
return String.Join(" + ", ((List<Key>)value).ToArray());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.