问题标签 [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 投票
2 回答
1371 浏览

c# - 如何将三个滑块的值转换为颜色?

我正在尝试创建一个自定义用户控件,该控件将允许用户在 WPF 中定义颜色。我以前在 WinForms 中这样做过,但在 WPF 中似乎并不那么直接。这也是我第一次处理多转换器。

该控件有 3 个滑块 - 像这样:

唯一的区别是每个的名称 - sdrRed、sdrGreen 和 sdrBlue。

这是多值转换器:

这是我所能得到的 - 我无法找到如何进行的示例。

另外-如何将静态值传递给多转换器,以便我可以仅使用单个滑块定义颜色(例如,以便我可以定义红色、蓝色或绿色的阴影)?

编辑

为了清楚起见;控件本身将具有依赖属性:

此控件会将转换后的 Color 值传递给该绑定,以便其他颜色可以绑定到它。我希望这能解决问题。

0 投票
1 回答
701 浏览

c# - MultiBinding 与多个输出

让我们考虑以下动物Model

Animal对象的集合如下:

在我的ViewModel我填充animals喜欢:

ViewI 中定义了两个ComboBoxes 和一个DataGrid,描述如下:

  • 第一个组合框项目是"wild animals""pets"SelectedItem组合框的 绑定到 的selectedAnimalType属性ViewModel
  • 第二个组合框项绑定到第一个组合框选择;即,"cat"/"dog""lion"/"tiger"分别为"pet""wild animals"。此SelectedItem组合框的 绑定到 的selectedAnimalCategory属性ViewModel
  • 根据DataGrid两个组合框的选定值显示动物。

MyDataGrid的定义和约束如下:

最后,我定义AnimalSelectionConverter如下:

问题 :

我将选定的动物集合绑定Animal.name到. 但是,我也有兴趣在. 例如,我想在我的:Animal.ageDataGridSelectedItemselectedAnimalTypeDataGridDataGrid

pets被传递selectedAnimalType给转换器,转换器使用此信息加上selectedAnimalCategory来获取myCat 1myCat 2。因此,是否可以从 中返回多个值,MultiValueConverter以便我看到我DataGrid的上述?

以防万一有人有兴趣查看可能的最小运行代码示例,我准备了我的问题的一个小项目,您可以在 DropBox 上找到源代码。

0 投票
1 回答
226 浏览

wpf - 根据 MultiValueConverter 返回的值设置元素背景 - 怎么做?

我设计了一个电池电量指示器,由另一个边框内的边框组成。内边框的宽度与外边框ActualWidth和电池值本身多重绑定(从DataContext,范围从 0.0 到 1.0):

===================

现在我想Background用另一个 IMultiValueConverter 为该属性做一些类似的事情。颜色应该这样计算:

  • 如果高于 0.8,则为绿色;
  • 黄色介于 0.6 和 0.8 之间;
  • 橙色在 0.3 和 0.6 之间;
  • 如果低于 0.3,则为红色。

这些颜色被定义为资源,因为我绝对不想在代码中声明它们,所以我的问题是:

如果颜色被定义为资源,并且在 MultiBind 转换器中计算了实际应用的颜色,我如何根据返回的值应用颜色,或者让 MultiConverter 评估可用颜色并返回所选颜色本身?

0 投票
3 回答
985 浏览

wpf - 如何创建有条件地转换用户输入的 WPF 文本框?

我想创建一个 TextBox 可以进行测量并在必要时将其转换为不同的单位(最终结果为 type double)。转换将由一个值控制IsMetric。如果IsMetric == truethen"36.5 in"会变成927.1(代表毫米的双精度数)。反之,如果IsMetric == falsethen"927.1 mm"会变成36.5.

我想IValueConverter在常规上使用 an TextBox,但ConverterParameter不是 a DependencyProperty,因此我无法绑定IsMetric到它。

我试过IMultiValueConverter了,但该ConvertBack函数只接收当前值TextBox而不是所有绑定值。这意味着我不知道IsMetric何时转换用户输入。

我是否错过了该ConvertBack功能的某些内容?如果不是,那么我需要创建一个派生自的类TextBox吗?

0 投票
3 回答
8242 浏览

c# - 为 IValueConverter 指定目标类型

我有一种情况,我正在使用多值转换器。传递给它的值本身正在被转换。

Converter1 包含一些错误检查,以确认使用有效的目标类型调用它。如果没有,它会抛出异常,因为这是开发人员错误,应该修复这种情况。

问题是当在此上下文中使用 Converter1 时,目标类型是 System.Object。现在 BooleanAndConverter 需要某种类型(布尔)的值,那么我怎样才能将该类型作为 Converter1 的目标类型传递呢?

这里要求的是 BooleanAndConverter 代码:

让我重申这个问题,因为似乎有些混乱。Converter1 知道它可以从什么类型转换到什么类型。当使用错误的类型调用时,它会引发异常。在这种情况下,未指定 targetType 并引发异常。如何正确指定 targetType?在多绑定情况下不使用时,总是会根据正在转换的内容正确指定。

0 投票
1 回答
2048 浏览

wpf - 无法设置多重绑定,因为必须指定多值转换器 WPF

我在使用 WPF 转换器时遇到问题,它给了我这个错误“无法设置多重绑定,因为必须指定多值转换器”。我查看了一些论坛并找到了一些信息,但它仍然显示错误

我的 .cs 代码:

我的xml:

也许你知道如何解决它?

0 投票
2 回答
112 浏览

wpf - 在 DragDrop 之后未调用 MultivalueConverter

我有一个更新时或更改时IMultivalueConverter的背景颜色。这些控件是动态创建的。StackPanelPropertyAPropertyB

问题:我添加了两个并在单击按钮时StackPanels更改了代码。PropertyA这会导致属性更改事件。

对于第一个stackpanel背景颜色没有更新,但对于第二个stackpanelthis.PropertyChanged 反过来调用我的 MultiValueConverter 并且背景颜色被更新。

我无法理解为什么当两者都属于同一类型并且事件处理程序不为空时,为什么只有一个控件正在更新。

编辑:如果我将一个单元格值从其他控件(DevExpress DataGrid)拖放到第一个堆栈面板中,然后更改属性,则背景不会更新。在我拖放之前它工作正常。

更新:

更新 2:我也尝试过使用 MultiDataTrigger 而不是 Converter,但无法解决问题。

0 投票
0 回答
711 浏览

c# - 将多个动态值传递给转换器 WPF

我正在WPF使用telerik:RadGridView我必须ReadOnly在某些条件下创建列的应用程序中工作。条件值位于集合中,该集合绑定到gridview以及来自 的一些值ViewModel

//Xaml:

我必须使用将MemberId和其他值传递ViewModel给转换器并进行一些返回boolean值的计算。将值分配给使其工作的IsReadOnlyBinding属性。GridViewColumn

//静态数组:

我已经处理了上面的代码,其中静态值作为数组传递给转换器,但我需要将动态值发送给MemberId,blnReadFlag,ItemName转换器。

我怎样才能做到这一点?

0 投票
2 回答
1168 浏览

c# - 在 WPF 中将多个参数(包括类型)传递给 ViewModel

如何将 XAML 中的两个参数(一个 Type 对象和一个 Model {Binding})作为 CommandParameter 传递给 ViewModel。我在 SO 上遇到了不同的帖子,但都在使用控件绑定。有没有办法通过 Type 来代替。

我想要这样的东西:

这段代码仅使用一个参数:

0 投票
1 回答
43 浏览

c# - How to bind Start, End and Duration with Multibinding?

I have two properties in my ViewModel:

I have three textboxes in my View:

I want to achieve the following behavior:

  • When the user changes the content of the Start- or the EndTextBox, the DurationTextBox should be updated accordingly (Duration = End - Start).
  • When the user changes the DurationTextBox, the EndTextBox should be updated accordingly (End = Start + Duration).

I can achieve this by listening to the TextChanged events in code behind. I would prefer to achieve this via MultiBinding, though. Is it possible?

The problems I encounter, when I try to use MultiBinding:

  • If I put the MultiBinding on the DurationTextBox I cannot bind it to the Duration property.
  • If I put the MultiBinding on the EndTextBox and the user changes the StartTextBox, the EndTextBox gets updated instead of the DurationTextBox.
  • In any case I'm not able to implement the ConvertBack method.