自訂 IP 地址控件:4 個 TextBox 對應 4 個位元組,透過 MultiBinding 雙向綁定至單一 IPAddress 屬性。最後一個 TextBox 單向綁定 IPAddress 顯示完整地址。修改前 4 個 TextBox 任一值,最後一個 TextBox 能正確更新;但程式碼直接設定 IPAddress 後,前 4 個 TextBox 不再回應變更。
MultiBinding 預設模式為 OneWay(源 → 目標)。當目標屬性(IPAddress)由程式碼直接賦值時,繫結引擎視為「目標主動更新」,不會反向推播至來源,導致來源與目標不同步,後續來源變更也無法正確流向目標。
<TextBox.Text>
<MultiBinding Converter="{StaticResource IpConverter}" Mode="TwoWay">
<Binding Path="Byte1" />
<Binding Path="Byte2" />
<Binding Path="Byte3" />
<Binding Path="Byte4" />
</MultiBinding>
</TextBox.Text>
確保 IPAddress 屬性實作 INotifyPropertyChanged,且 Converter ConvertBack 正確拆解 4 位元組。
ViewModel 僅暴露 string IpText(如 "192.168.1.1"),TextBox 直接雙向綁定此字串,Converter 負責字串↔IPAddress 互轉,避免 MultiBinding 複雜度。
在設定 IPAddress 後,主動呼叫 BindingExpression.UpdateTarget() 強制刷新目標:
var expr = textBox1.GetBindingExpression(TextBox.TextProperty);
expr.UpdateTarget();
Mode="TwoWay" 並驗證 ConvertBack 邏輯。
修正後:修改任一位元組 TextBox,完整 IP 即時更新;程式碼設定 IP,4 個位元組 TextBox 同步顯示,雙向同步正常。