此示例的上下文是有四個文本框可以容納總時間。1 表示小時,1 表示分鐘,1 表示秒,1 表示毫秒。有第五個文本框以毫秒為單位保存總時間。這可以在下圖中看到。我已經做了一個實現IMultiValueConverter,應該轉換 4 個TextBox組件和一個屬性中的轉換值。它還應該能夠在屬性值更改時更新 4 個框。當用戶在保存轉換輸出的文本框中鍵入內容,然后該框失去焦點時,其他 4 個文本框會更新。但是,當以編程方式更改屬性值時(在這種情況下通過單擊按鈕),4 個文本框中的值不會更新。如何通過轉換器更新這 4 個文本框?在此示例中,最終目標是將總時間(以毫秒為單位)存儲在屬性中,并在更新該屬性時通過綁定更新 5 個文本框。這是轉換器的代碼。using System;using System.Globalization;using System.Windows.Data;namespace MultiBinding_Example{ public class MultiDoubleToStringConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { object returnVal = ZERO_STRING; try { if (values != null) { returnVal = totalTime.ToString(); if (values[0] == valBuffer) { values[0] = returnVal; } else { valBuffer = returnVal = values[0]; ConvertBack(returnVal, new Type[] { typeof(string), typeof(string), typeof(string), typeof(string), typeof(string) }, parameter, culture); } } } catch (FormatException) { } return returnVal; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { try { if (value != null && value.ToString() != string.Empty) { double timeInMilliseconds = System.Convert.ToDouble(value); } } catch (FormatException) { } return new object[] { ZERO_STRING, ZERO_STRING, ZERO_STRING, ZERO_STRING, ZERO_STRING }; } }}為了測試這一點,我有一個非常簡單的布局,它由幾個Label組件、幾個TextBox組件和一個Button.看起來像這樣。
當屬性值更改時更新文本框 - WPF
繁花不似錦
2021-11-21 10:08:35