簡體   English   中英

從類型轉換器訪問綁定?

[英]Accessing Binding from Type Converter?

我花了很多時間嘗試許多不同的方法來解決我遇到的問題,但無濟於事,所以我希望這里的人能為您提供幫助。

我有一個帶有雙向綁定的Text Box元素,該元素利用類型轉換器將值從字符串轉換為自定義數據類型,例如MyCustomType 一切正常,但是由於我的項目要求發生了變化,我現在需要在進行轉換之前執行額外的處理。

但是,為了執行此額外處理,我需要能夠訪問“源”文本框或綁定上下文。 我都無法訪問。

是否可以通過類型轉換器的ConvertFrom()方法訪問源文本框?

我嘗試使用(通過WPF)傳遞給ConvertFrom()方法的ITypeDescriptorContext參數,但是其中的大多數屬性為null。

public class MyCustomTypeConverter : TypeConverter
{
   ...
   public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
   {
      // Context is
      return new MyCustomType(value);
   }
   ...
}

ConvertFrom()中的上下文

上下文-其他屬性

我也嘗試過使用MultiValueConverter ,並且完全避免使用Type轉換器,但是這導致了很多額外的代碼,並沒有真正的幫助。 我寧願避免沿着這條路線走,因為類型轉換器要優雅得多。

任何建議/協助將不勝感激! :)

編輯:我最終改變了執行驗證的方式(使用INotifyDataError而不是對異常進行驗證),並最終在類型轉換器中重寫了ConvertFrom()方法,這樣我就不需要訪問TypeDescriptor '的環境了。

我不建議使用ConvertFrom()方法中的上下文,因為不能保證該屬性(作為私有屬性)將來會存在(盡管我還沒有閱讀任何內容來支持它,但最好)假設可以刪除/重命名私有屬性而無需MS開發團隊的通知),並且在以編程方式設置屬性值時未設置私有屬性,例如:

TypeConverter converter = TypeDescriptor.GetConverter(typeof(MyCustomType));
converter.ConvertFrom(mySourceValue);

如果您正在閱讀此書,並且確實需要訪問context參數,則可以使用下面的我的方法來做,后果自負。


我可以通過查詢ValueConverterContext類並訪問私有_targetElement字段來解決此問題,如下所示:

var sourceTextBox = context.GetType().GetField("_targetElement", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(context)

仍然感謝您的幫助。 :)

編輯:要訪問此TextBox的綁定,只需將sourceTextBoxTextBox ,然后:

var BindingExpression = sourceTextBox.GetBindingExpression(TextBox.TextProperty);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM