问题标签 [multibinding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3760 浏览

wpf - 在使用 MultiBinding 绑定多个 CommandParameters 方面需要更多帮助

我需要有一个 ToggleButton 的命令处理程序,它可以采用多个参数,即所述 ToggleButton 的 IsChecked 属性,以及一个常量值,它可以是字符串、字节、int ... 没关系。

在 SO 上找到了这个很好的问题,并按照答案的链接阅读了 MultiBinding 和 IMultiValueConverter。在我不得不编写 MultiBinding 之前,它真的很顺利,当我意识到我还需要传递一个常量值并且不能做类似的事情时

然后我遇到了 Kent Boogaart 回答的另一个类似问题,然后我开始思考可以解决这个问题的方法。

一种可能的方法是不使用 MVVM,只需将 Tag 属性添加到我的 ToggleButton,在这种情况下,我的 MultiBinding 将如下所示:

Kent 曾发表评论,“如果你使用 MVVM,你应该能够解决这个问题”。但是,我不确定这是否适合我,即使我已采用 MVVM 作为 WPF 模式的必要选择。

之所以这么说,是因为我在UserControl中有不止一个ToggleButton,而且每个ToggleButtons的Commands都需要调用同一个函数。但是由于它们是ToggleButtons,我不能在ViewModel中使用绑定到IsChecked的属性,因为我不知道最后点击的是哪一个。我想我可以添加另一个私有财产来跟踪这一点,但这似乎有点傻。就常数而言,如果我做了跟踪的想法,我可能会摆脱它,但不确定是否有任何其他方法可以绕过它。

有人在这里对我有好的建议吗?:)

编辑——好的,所以我需要更新我的绑定,它仍然不能正常工作:

IsChecked 有效,但标签无效。我刚刚意识到 Tag 是一个字符串......呃。它现在正在工作!关键是使用Self的 RelativeSource 。

0 投票
2 回答
5136 浏览

wpf - WPF:有没有办法在 MultiValueConverter 的 ConvertBack 方法中获取原始值?

我编写了一个 MultiValueConverter,它检查给定列表是否包含给定值,如果包含则返回 true。我用它来绑定到自定义复选框列表。现在我想编写 ConvertBack 方法,以便如果选中复选框,原始值将被发送到模型。有没有办法访问 ConvertBack 方法中的值?

XAML:

我在绑定时得到正确的结果,但是有没有办法在转换回来时获取绑定的 id?我想要实现的是,如果未选中复选框,则该值将从列表中删除,如果选中,则该值将添加到列表中。

0 投票
1 回答
594 浏览

validation - 双向多重绑定验证

我有这种情况,其中 ex,textbox1 有一个多重绑定,其值取决于 textbox2 和 textbox3,并且绑定是两种方式,如果减去,所有文本框都对 ex 错误应用相同的验证规则。

不知何故,如果 textbox1 更新了 textbox2 和 textbox3 验证将触发。但是当 textbox2 或 textbox3 更新时, textbox1 验证将不会触发。

  • 我试过设置 ValidatesOnTargetUpdated="True" 但什么也没发生。

有什么建议吗?

0 投票
2 回答
1678 浏览

c# - 为什么 MultiBinding a TranslateTransform.X 似乎在 WPF 中不起作用?

我希望我不是在傻傻地问这个问题,但我正在尝试在 WPF 中设计一个图形查看器,作为框架中的一个完全新手;尽管我确实为我的问题提出了一些解决方案,但我最引以为豪的一个......并没有在应有的地方发挥作用。我想要做的是将 ItemsControl 上的一个节点放置在我用 Dijkstra 的 alg + 一些数学计算的位置。问题是我在使用普通 X 和 Y 绑定时移动的是带边框的 TextBlock 的左上角,但我想操纵的是它们的中心。因此,我的节点最终会从我指定的点向下并向右移动,而不是以它为中心。

我最终决定使用 NodeViewModel 的 X/Y 属性和 Grid 的 ActualWidth/Height 进行多重绑定。发生的事情是我的所有节点都放置在 (0,0)!我什至调试了代码并查看了转换器,但返回值似乎还可以。我什至尝试了一些随机的东西,比如绑定到其他属性等。

我完全不解。

所以一个问题是——MultiBinding 是这样工作的吗?还是我犯了一些愚蠢的错误?我将在 XAML 代码下方发布我的转换器。XAML 中删减的部分是工具提示和嵌入的 ItemsControl,但删减这些部分并没有改变(除了提高代码的清晰度)。转换器中的铸造是因为直接铸造到浮动对我来说不起作用(但这无关紧要 - 即使它不是很漂亮,它也会以它的方式工作)。

另一个问题是——我可以用更简单的方式来做吗?喜欢直接操纵 TextBlock 的中心?

XAML:

C#:

干杯,迈克尔

0 投票
2 回答
8145 浏览

c# - WPF 多重绑定

我需要不使用 XAML 直接在 C# 中实现 MultiBindings,我知道如何在 C# 中使用 IMultiValueConverter,但是,该怎么做:

在 C# 中?

0 投票
1 回答
98 浏览

wpf - 如何将对象中的新属性值分派给其他两个对象的相同属性

在 WPF 中,我有三个暴露相同DependencyProperty的对象(假设它是一个整数)。我希望所有三个属性值保持同步,即每当对象中的 int 值发生变化时,该值就会传播到其他两个对象。我multibinding想做这项工作,但我不知道如何检测哪个对象发生了变化,因此应该使用哪个值并将其传播到其他对象。

编辑:这是我的多绑定暂定代码,错误地希望它可以在没有额外代码的情况下工作:

但实际上,有一个运行时错误,说最后一条指令设置的绑定缺少转换器。但是我又不知道如何编写这个转换器(没有什么要转换的(因为在将 3 个 rgb 属性链接到颜色属性的相关 MS 代码示例中就是这种情况),只是为了转发更改的属性值到其他两个属性)。

我知道我可以通过在 3 种类型中创建一个 X_Changed 事件来解决问题,然后让每个对象注册到另外两个对象事件。我不喜欢这种“手动”方式,更愿意将 3 个属性绑定在一起。

0 投票
1 回答
1803 浏览

wpf - 将文件路径多绑定到按钮 ControlTemplate

我正在尝试开发一个应用程序,该应用程序使用存储在单独的远程文件位置的多个图像。UI 元素的文件路径存储在应用程序设置中。虽然我了解如何使用 MultiBinding 和值转换器从应用程序设置访问图像,但我不确定如何将 Multibinding 集成到下面的 ImageButton ControlTemplate 中。谁能引导我朝着正确的方向前进?

0 投票
4 回答
217073 浏览

wpf - 如何将多个值绑定到单个 WPF TextBlock?

我目前正在使用TextBlock以下内容绑定名为的属性的值Name

现在,我想将另一个名为的属性绑定ID到相同的TextBlock.

是否可以将两个或多个值绑定到同一个TextBlock?可以通过简单的连接来完成,例如Name + ID,如果不能,还有什么方法可以解决?

0 投票
1 回答
7125 浏览

wpf - FallbackValue 如何与 MultiBinding 一起使用?

我问是因为它似乎不起作用。

假设我们绑定到以下对象:

好吧,看起来如果我们对此使用MultiBinding会显示回退值,对吧?

然而结果,其实是“到了”。即使强制绑定返回DependencyProperty.UnsetValue也不起作用:

对TargetNullValue进行了同样的尝试,这也是一个失败的过程。

所以看起来MultiBinding永远不会使用FallbackValue。这是真的,还是我错过了什么?


稍微搞砸了,我发现转换器可以返回我需要的 UnsetValue:

然而,这似乎是一个肮脏肮脏的黑客。我认为这样的场景会在框架中得到考虑。但是,我在 Reflector 中找不到任何东西。

0 投票
3 回答
5619 浏览

wpf - MultiBinding 中子绑定的转换器

假设我有这个 MultiBinding:

这似乎不起作用:传递给FooBarConverter的值数组包含DependencyProperty.UnsetValue每个值(在本例中为两个)。删除子绑定(FooConverterBarConverter)上的转换器给了我实际值。顺便说一句:这些转换器被正确调用,看起来它们的结果被丢弃了。

这是预期的行为吗?我想绑定 2 个属性,因为我需要至少转换其中一个,然后再将它们扔到MultiValueConverter...