【发布时间】:2018-08-03 03:01:38
【问题描述】:
请分析以下代码sn-p:
<TextBox x:Name="TxtBox_CommandInfo" Style="{DynamicResource MetroTextBox}"
IsReadOnly="True" Controls:TextBoxHelper.Watermark="This is a textbox"
HorizontalAlignment="Left" Margin="0,236,0,0" TextWrapping="Wrap"
VerticalAlignment="Top" Height="154" Width="780"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto">
<TextBox.Text>
<MultiBinding StringFormat="{}{0} {1} {2}" NotifyOnTargetUpdated="True">
<Binding Path="A" />
<Binding Path="B" />
<Binding Path="C"/>
<Binding Path="D" Mode="TwoWay" NotifyOnTargetUpdated="True"
UpdateSourceTrigger="PropertyChanged"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
如您所见TxtBox_CommandInfo 文本框文本(目标)值将仅由 A,B,C 修改/格式化,但更新后的文本应通过 binding.Model 通知D,如下所示:
A,B,C => [TexBox.Text] => D
问题是当TxtBox_CommandInfo.Text 发生更改时,C# 端的各个源 D 不会得到通知和更新。
- 没有任何
Converters如何实现这个问题的解决方案? - 我是否错误地配置了
Multibinding设置?
它确实需要StringFormat 功能,因此在不注入转换的情况下,我们有任何替代StringFormat 的方法吗?
【问题讨论】:
-
为什么虚拟机上的
D属性不只是一个结合A+B+C的getter? -
完全不清楚你想要什么。您的
Textbox是ReadOnly。无法更新。任何修改都必须从 A、B 或 C 完成。正如 slugster 所说的 VM 中的格式 D。publin string D => $"{A} {B} {C}";问题解决了。 -
@BuddhikaChaturanga 您不能在只读文本框上绑定 TwoWay
-
也许我不明白你想要什么。您有 3 个属性 A、B 和 C。您希望在 TextBox 中显示对这些属性的任何修改。该 TextBox 必须更新您的第四个属性 D ?我对么 ?如果不是,请修改您的问题并明确您想要什么?也许是一幅画或什么
-
@BuddhikaChaturanga 你完全没有理解我的意思。您不需要绑定即可将字符串组合回属性 - 目标属性可以只包含执行此操作的代码。您正在为非常简单的事情尝试复杂的解决方案。这里有这么多 cmets 的事实表明您需要退后一步重新评估您的代码。
标签: c# .net wpf data-binding multibinding