问题标签 [imultivalueconverter]

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 投票
3 回答
1211 浏览

wpf - IMul​​tiValueConverter 是否可用于 UWP

我正在将 a 转换WPFUWP,它使用了多个IMultiValueConverters. 我找不到任何参考IMultiValueConverter。它在 中可用UWP吗?如果没有,是否有替代方案?

0 投票
1 回答
439 浏览

wpf - ViewModel 中的双向 MultiBinding 单个属性到 View 中的多个属性 - 我可以恢复 IMultiValueConverter 吗?

我想使用 将 ViewModel 中的单个属性映射到 View 中的多个属性IMultiValueConverter,但我注意到Convert映射多对一,ConvertBack方法映射一对多。

问题是我需要将其反转,也就是说,我希望 View 中有多个属性依赖于 ViewModel 中的单个属性,并且应该交换Convertand签名(或调用)。ConvertBack

有没有办法让 MultiBinding 调用ConvertBack方法来代替Convert,反之亦然?

0 投票
2 回答
135 浏览

wpf - 使用转换器时绑定组合框不起作用

我正在尝试将 a 绑定ComboBoxDataContext.

上面的代码有效,但是当我尝试使用转换器实现更改项目的显示方式时IMultiValueConverterMultiBinding没有显示任何内容。我已经调试了实现的方法IMultiValueConverter,但它没有被执行。可能是什么问题呢?

更新:

我尝试了以下而不是ComboBox,转换器被触发并且数据被加载但不显示!

但以下工作:

0 投票
1 回答
65 浏览

wpf - 从 ObservableCollection 读取的 MultiValueConverter

我正在开发一个 wpf mvvm 项目。在用户控件中,我有一个来自 Devexpress 的 datagridControl,它绑定到 Observable 集合中的数据。

Observable 集合中的类包含一个 Name(字符串)和 IsVerified(布尔值)。

我还有一个文本块,当 IsVerfied 的值为 false 时,我使用它在 dataGrid 上方显示错误消息。

为此,我计划使用一个 multivalueconverter(我也在做同样的事情,但使用不同的控件,这就是我选择 MultiValueConverter 的原因),我想从 Collection 发送 IsVerfied 值并返回消息。我的问题是如何设置 MultiBinding 中的绑定以从 Observablecollection 中读取 IsVerfied 值。我认为这条特定的线是定位 Collection 值的问题

0 投票
1 回答
1020 浏览

c# - 如何在 ComboBox TemplateSelector 内强制更新 WPF 多绑定?

作为前言,这个问题来自扩展这个关于如何使所选项目看起来与组合框中的下拉项目不同的答案。

我正在尝试使我的自定义选定项目使用来自 ComboBox 的 Tag 属性的信息。由于我需要使用转换器,因此我使用了一个多转换器,以便能够将“我自己”发送到转换类。因此,我有这两个模板:

还有我的转换器:

组合框的 XAML

所有这一切都很好地产生了这个:

屏幕截图

现在,我需要做的是在更改 Tag 属性时将“Custom Stuff C”更改为其他内容。到目前为止,它只会在我更改所选项目时更改,但我需要更改它而无需用户将其更改为 D,然后再更改回 C。

从研究中,我尝试使用以下代码强制更新,但它不起作用。

请注意,我确实有一个继承自 的自定义控件ComboBox,因此我确实可以访问受保护的方法(这是上面最后一行代码的工作方式)。我只是将那部分提取出来,以便提供一小部分可重现的代码。

在这一点上,我不确定还能尝试什么。那么如何根据我的操作方式强制我的绑定更新呢?

0 投票
2 回答
391 浏览

c# - 多值转换器不可访问

我有以下 XAML 文本框:

我正在尝试将其绑定到一个转换器,它代表以下内容:

但是 Visual Studio 告诉我以下内容:

名称空间“clr-namespace:CIC.OrderProcessor”中不存在名称“ShippingLabelConverter”。

标记扩展类型无效:预期类型为“IMultiValueConverter”,实际类型为“ShippingLabelConverter”

我已经检查了我的转换器类的命名空间,它绝对是正确的。它还继承了“IMultiValueConvterer”类型,所以我有点不确定从哪里开始——错误看起来应该很明显,但我看不到我应该做的任何改变。

额外的信息

我的 XAML 中本地命名空间的声明如下:

0 投票
2 回答
475 浏览

c# - GridViewColumn 中的 WPF 转换器 - 保留 ConvertBack-Method 的值并为每一行拥有自己的 Binding-Instance

我有GridView一些列显示材料。viewmodel 值都以 kg 为单位保存,因为某些视图应转换并显示为升。使用IMultiValueConverter.

现在我在进行向后转换时遇到问题。我试图将输入值(密度)存储在转换器中,但确实有它的单个实例,因此有时密度值错误。我找到了这个 x:shared="false" 方法,但想将转换器设置在派生自System.Windows.Data.MultiBinding.

我认为这将导致每个 Binding 都有一个单独的实例——它不会。我怎样才能做到这一点?

编辑:正如 mm8 在此答案中所建议的,问题在于绑定实例。在其单元格模板中定义 a 上的绑定时,GridViewColumn我将每列仅点击构造函数一次。所以问题是我怎样才能改变它——它甚至可能吗?

0 投票
1 回答
118 浏览

c# - 可观察集合在 xml 上

我目前正在研究CustomConverterWPF。这就像一个通用转换。

阅读此博客,找到了一种简化 xaml 的方法。

所以转换器看起来像这样:

在我的 Xaml 文件中,有以下内容:

因此,在调试代码时,该Parameters属性为空(null),因此 xaml 不会填充集合。所以我的问题是,如何仅使用 xaml 而不使用 C# 代码来填充参数。

0 投票
0 回答
393 浏览

c# - 为什么 ListView 内容变小时会出现水平滚动条?

我在 WPF 中使用 ListView。为了扩展最后一列的宽度,我使用了与此类似的方法:

如何根据 WPF 中的窗口大小调整某个控件的大小?

当我实现附加代码时,总是会出现一个水平滚动条,所以我知道 ListView 的内容比控件大。可以隐藏滚动条的可见性,但这并不能解决问题。

和 XAML:

  1. 即使内容较小,为什么还会出现 Horizo​​ntalScrollBar?这里基本上计算列的宽度并从整个宽度中减去。所以剩余的宽度应该完全适合填充剩余的空间。

  2. 查看右侧的最后一列(应该扩展),列标题中会出现一个分隔符。为什么会这样?

在此处输入图像描述

我该如何处理?

0 投票
2 回答
168 浏览

c# - IMul​​tiValueConverter 在 DataGridTemplateColumn 中使用时从绑定值接收空字符串

我在绑定到 DataGrid 的 Observable 集合中有一组嵌套的对象。IMul​​tiValueConverter 用于从两个属性收集信息;这在我在 DataGridTextColumn 中这样做时有效,但在 DataGridTemplateColumn 中失败。这是一个复杂的情况,所以我将进一步分解并发布我的代码的简化版本。

每个列表项的嵌套如下: User_Ext 类继承了 User 类,该类具有 User_Rank 类的属性,而 User_Rank 类又具有 User 类的属性。不幸的是,这种嵌套对于程序的设置方式是必要的。

还有一个单独的 Rank 对象列表,它被绑定为 DataGridTemplateColumn 中的 ComboBox 的选项,它将从 ObservableCollection 中的项目切换 Rank。

Rank 有一个布尔属性 Require_License,而 User 有一个字符串属性 License。这个想法是使用 IMultiValueConverter 突出显示单元格,如果许可证为空白且 Require_License 为真。

我在这里的示例代码中包含了 DataGridTextColumn 和 DataGridTemplateColumn,以便更轻松地演示正在发生的事情。

对于绑定到 License 的 DataGridTextColumn,只要我编辑 Rank 单元格的 ComboBox 选项或 License 文本的内容,转换器就会触发,并且所有信息都会继续。

对于绑定到许可证的 DataGridTemplateColumn,转换器仅在我更改 ComboBox 选项时触发,而不是在我编辑许可证文本时触发。最重要的是,当转换器捕获 ComboBox 更改时,许可证的值是一个空字符串(不是 UnsetValue)而不是单元格的内容,而第二个绑定值(排名选择)是正确的。我还应该在这里提到,所做的任何更改都会正确更新 ObservableCollection 中的项目,因此绑定的这方面工作正常。

我已经尽我所能在这里进行搜索,但我似乎无法找到解决这个问题的方法。

如果有任何问题或被遗忘,我会提前道歉,但我不得不去掉我作品的识别标记,并希望尽可能多地包括在内,因为我不确定问题出在哪里。但是,如果我的代码有助于将其复制到项目中并对其进行测试,那么我的代码是可操作的。如果我过于冗长,我也很抱歉;这是我在这里的第一个问题,我不确定用多少措辞来描述这种情况是合适的。

至于为什么我不只使用功能性 DataGridTextColumn,还有更多的事情我需要落实到位,我需要 DataGridTemplateColumn 的灵活性。

这是我的 XAML:

还有我的 C#:

编辑2017-07-25

我一直在玩它,我发现 DataGridCheckboxColumn 也有同样的问题。现在,我对控件的内部功能知之甚少,但这就是我所观察到的。

- IMultiValueConverter 确实看到了单元格的初始值。

-当使用带有 TextBox 的 DataGridTemplateColumn 时,绑定到 DataGrid 的 ItemsSource UserImport 会在 DataGrid 中进行更改时得到更新。但是,当绑定的许可证更改时,IMultiValueConverter 不会触发。当绑定的 user_Rank.rank 更改(在 DataGridComboBoxColumn 中)时,它会这样做,但即便如此,许可证更改也不会反映。

- 如果我尝试使用 DataGridCheckBoxColumn,也是如此。

- 如果我单击列标题,导致发生列排序,IMultiValueConverter 将在排序时获取许可证的值,但之后不会更新。

- 如果我在其中使用带有 DatePicker 的 DataGridTemplateColumn,我会遇到与其他情况相同的问题:IMultiValueConverter 不会接受更改……除非它这样做。如果我在文本区域内疯狂单击日期选择器按钮,在日期选择器中选择一个日期,单击日期选择器按钮右侧的小空间,然后单击远离框,我发现有时IMultiValueConverter 会触发。有时是在我单击 DatePicker 中的日期时,有时是在我单击按钮旁边的那个空间时,有时是在我单击按钮旁边的那个空间单击另一个单元格时。

所以,我在单元格中更新了一个值,在绑定对象中更新,但不知何故没有被 IMultiValueConverter 拾取,除非在某些情况下。就好像数据被存储在第三个位置一样。我想知道(再次,没有控件的内部知识)当您单击离开时,某些单元格内容是否仅更新单元格内的控件而不更新单元格本身。

单元格内的控件是否有可能将其“值”与单元格分开测量,直到它“更新”单元格的“值”?如果是这种情况,并且控件正在更新绑定对象而不更新单元格,并且 IMultiValueConverter 正在查看单元格而不是绑定对象或单元格内的控件......也许这将是我的问题?

请有人告诉我我错了,然后解释这种现象。:)

编辑 我找到了一个我将发布的解决方案。