我有一個轉換器,它接受一個IEnumerable並返回一個包含多行的字符串。 convertback函數做了相反的處理,它接受一個包含多行的字符串並返回一個List。我在幾個地方使用它,它效果很好。在OneWay綁定中使用ConvertBack功能代替Convert函數
我的問題是,我現在有我想使用Convert和ConvertBack函數的位置(例如,在OneWay綁定中,它使用ConvertBack函數)這在XAML中可能嗎?
我有一個轉換器,它接受一個IEnumerable並返回一個包含多行的字符串。 convertback函數做了相反的處理,它接受一個包含多行的字符串並返回一個List。我在幾個地方使用它,它效果很好。在OneWay綁定中使用ConvertBack功能代替Convert函數
我的問題是,我現在有我想使用Convert和ConvertBack函數的位置(例如,在OneWay綁定中,它使用ConvertBack函數)這在XAML中可能嗎?
創建這樣的轉換器是可能的,例如:
class ListStringConverter : IValueConverter
{
public bool IsListToString { get; set; }
public ListStringConverter()
{
IsListToString = true;
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return IsListToString ? FromListToString(value) : FromStringToList(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return IsListToString ? FromStringToList(targetListItem) : FromListToString(targetListItem);
}
public object FromListToString(object list)
{
.... // Conversion Logic
}
public object FromStringToList(object myString)
{
.... // Conversion Logic
}
}
在XAML可以這樣
<ListStringConverter x:Key="StringToListConverter " IsListToString ="False" />
我不知道它的可能與否,但即使可能,我也不會做這樣的事情。
轉換器用於將綁定值從一個值轉換爲另一個值,如果您改變了該值,那麼您將改變WPF的核心功能的一部分,這將使其他開發人員在將來非常困惑。
我反而會做第二個轉換器,爲您做逆向轉換。
如果轉換時間很長,我有時會將重複的代碼拉出來,並將其放在轉換器類文件的自己的方法中,並使兩個轉換器只調用該方法。
感謝您的解決方案。這將工作,雖然我需要一種方法,不會強迫我回去編輯預先存在的代碼。 – Lukiahas
@Lukiahas當轉換器被創建時,'IsListToString'屬性實際上是從XAML設置的,儘管當轉換器被使用時你也可以將它設置爲'ConverterParameter' – Rachel
正如Rachel所說,我認爲你不會需要編輯預先存在的代碼(轉換器除外),因爲您有一個IsListToString的默認值(在轉換器的構造函數中),您只需對現有轉換器稍作修改。 – Blachshma