亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當屬性值更改時更新文本框 - WPF

當屬性值更改時更新文本框 - WPF

繁花不似錦 2021-11-21 10:08:35
此示例的上下文是有四個文本框可以容納總時間。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.看起來像這樣。
查看完整描述

1 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

這并不是轉換器的真正用途。

轉換器采用一組視圖模型值并將它們轉換為用于顯示的視圖值。然后,如果視圖值發生變化,它可以將它們轉換回視圖模型值。

在您的情況下,視圖模型值通過代碼更新(而不是通過更改視圖),因此轉換器沒有理由運行該ConvertBack方法(該值已經是視圖模型值?。?。這是轉換器不應有副作用的幾個原因之一。

執行此操作的正確方法是將其TotalTime作為 VM 上的一個屬性(可能是一個數字,TimeSpan而不是您擁有的字符串),然后為每個部分執行單獨的轉換器。例如:

 <TextBox Text="{Binding TotalTime, Converter={StaticResource TimeSecondsConverter}"/>

然后主文本框將綁定到TotalTimeTimeSecondsConverter可能需要成為多值轉換器才能ConvertBack工作。


查看完整回答
反對 回復 2021-11-21
  • 1 回答
  • 0 關注
  • 289 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號