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

wpf - 扩展 Binding 类以提供可绑定的转换器参数

我需要创建一个特定格式的字符串,为此我使用 IMultiValueConverter。例子:

结果是:

这部分不是问题。基本上转换器接受多个字符串,其中第一个是字符串格式,后面是要格式化的字符串。

当某些字符串(绑定)也需要使用 IMultiValue 转换器时,它会变得很棘手。想象一下,属性#Value1# 对于不同的语言有不同的值。通常我们也使用 IMultiValueConverter 获得这样的值:

当用户切换到不同的语言时,字符串字典被更新,并且 TextBox 接收新值(同样适用于将值更改为 Value1)。

现在的问题是:不能在 IMultiValueConverter 中使用 IMultiValueConverter。您也不能覆盖 BindingBase 的 ProvideValue,并且 IMultiValueConverter 将只接受 BindingBase 类型的对象。

有什么办法可以扩展 BindingBase 以便它公开一个 BindableConverterProperty,它的值将用于从 Binding 提供值?

0 投票
2 回答
3166 浏览

wpf - 具有多个参数的 ValueConverter

我正在尝试编写一个具有三个相关属性的控件:值、最小值和最大值。值会发生变化,但最小值和最大值是固定的。

所以我写了一个IMultiValueConverter:

XAML 如下所示(它是一个自定义控件,因此是 RelativeSource 的东西):

这很好用,但是 ConvertBack 呢?我必须传回三个值……但我只有一个?另外两个是常数,那么我怎么知道它们是什么?

我的另一个可行的解决方案是创建一个名为 Angle 的依赖属性,它在自定义控件中完成所有工作......但暴露了似乎错误的 Angle。

0 投票
1 回答
60 浏览

c# - 为什么转换器不运行?

我正在使用 MVVM 模式,在我看来我有这个dataGrid

我的视图模型有这个代码:

当我执行该方法MyMethod()时,如果我没有错,多值转换器将运行,因为当我添加或删除项目时ObservableCollection执行器INotifyPropertyChanged,但在这种情况下不起作用。

但是我有另一个我的ObservableCollection,它按预期工作,当我从.DataSourcedataGriddataGridObservableCollection

但是,如果myMethod我这样做:

它可以工作,所以当我创建一个新的时,视图会被通知ObservableCollection,而不是当我从实际的ObservableCollecion.

0 投票
1 回答
214 浏览

c# - 如何在转换器中使用行的 IsSelected 属性?

我有一个数据网格,我正在使用这个多值转换器:

但是通过这种方式,我无法获得该行的 IsSelected 属性。如何在我的多值转换器中使用该属性?

0 投票
2 回答
644 浏览

c# - 附加属性未触发 IMultiValueConverter

下面是我的 DataGrid,其中包含一些与弹出控件相关联的附加属性。ComboBox 由枚举填充。

这是处理行为的类:

问题出在以下 IMultiValueConverter

当弹出窗口打开和关闭时,它会触发 IMultiValueConverter。
它在文本框文本更改时触发。
但是,如果 ComboBox 中的 SelectedValue 发生更改,则不会触发。

下面是当前触发时输出非常简单的转换器。

[编辑]

[结束编辑]

有人可以解决问题吗?

0 投票
0 回答
269 浏览

wpf - 多重绑定似乎不起作用

我看到 MultiBinding 存在问题。下面是代码片段

验证错误最初显示得很好。然后,我有 txtStatusMessage.Text =“创建成功”的代码。

执行此行后,当我给出无效值时,multiBinding 似乎不起作用。我创建的 MultiValueConverter 没有被调用。

我不确定我在这里缺少什么。非常感谢任何帮助。

问候, 曼达

0 投票
1 回答
708 浏览

wpf - 从两个单独的列表生成树视图,其中子对象具有父对象的 id

我遇到了一个问题,我在 ViewModel 中有两个单独的 ObservableCollection。一个列表包含以下对象:

另一个列表是:

ViewModel 是这样的:

Type是 的子节点,TypeCategory其中与父节点的连接是CategoryId。是否可以通过使用例如多重绑定和转换器来连接两个列表来生成 TreeView ?或者是扩展父类以包含它的子类的唯一解决方案?

0 投票
1 回答
1756 浏览

c# - IMul​​tiValueConverter 的 DataGridTextColumn 绑定不起作用

我有这个 DataGridTextColumn,我试图在上面放置一个 IMultiValueConverter。

在转换器中,当我执行以下操作时 GenericDataGrid 的绑定: Console.WriteLine(values[1].GetType()); 返回为MS.Internal.NamedObject

我该如何解决这个问题,以便它为我提供对 DataGrid 的引用?

[编辑]

这是我在制作绑定代理后所拥有的,但这与Path="Data". 输入后,我得到Object reference not set to an instance of an object.

你能看出代理绑定有什么问题吗?

在此处输入图像描述

[编辑 2]

另一个相关的问题。在转换器中,当我尝试获取 DataGrid 的 ItemsSource 时,它​​会抛出一堆错误。知道为什么会这样吗?

我唯一追求的是集合类型,也许有更好的方法。
实际上,我收回了它是重要的集合中的单一项目类型。

错误:

A first chance exception of type 'System.NullReferenceException' occurred in UserManagement.dll A first chance exception of type 'System.NullReferenceException' occurred in System.Xaml.dll A first chance exception of type 'System.NullReferenceException' occurred in PresentationFramework.dll A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll

0 投票
1 回答
819 浏览

wpf - 如何防止使用 MultiValueConverter 的多重绑定多次获取值并使用适当的参数

我想显示有关指定时间尺度(例如小时、分钟、秒)的时间信息。此信息显示在列表框的项目中。为此,我为 ListBoxItem-s 创建了一个自定义 ControlTemplate,例如:

转换器执行以下操作:

问题是,对于某些项目,Convert 方法被调用不止一次,并且在第一次调用时,而不是实际时间值 -DependencyProperty.UnsetValue 作为参数传递,在从输入数组中拆箱值期间导致 InvalidCastException。我怎样才能只实现一次转换并且(至少)使用有效参数?

关于这个问题有一些有趣的评论: 时间的价值是明确定义的。自从 .NET 版本以来,此代码已经运行了很长时间。4.0 但问题现在才出现(至少它开始不断地被客户和我们的测试机器复制)

0 投票
0 回答
183 浏览

c# - 多重绑定寻找缺失的祖先源错误:简单提示?

假设我有一个这样的 UserControl:

显然,我想根据它自己的依赖属性来缩放它的内容BaseSize以及容器 UserControl 在路径中某处通过这个 IconUC 祖先类型的依赖属性ContainerUC

当我将 IconUC 设置为一个 ContainerUC 的后代时,这非常有效。

不幸的是,当我将 Icon 放入另一个控件(如 StackPanel)中时,它没有 ContainerUC 作为祖先,我收到以下警告

System.Windows.Data 警告:4:
找不到与引用
'RelativeSource FindAncestor,AncestorType=' SandBox.ContainerUC ',AncestorLevel='1''的绑定源。
BindingExpression:Path= ScalingOverride ; 数据项=空;
目标元素是“ScaleTransform”(HashCode=51921052);
目标属性为“ScaleX”(类型为“Double”)

这很正常。

如何简单地防止该警告,例如在解析源路径失败时忽略绑定?

我想要的不是解决方法

  1. 在 ContainerUC 上使用 DependencyProperty.RegisterAttached,如果没有找到 Ancestor,则在 IconUC 中获取默认元数据值。我知道这是一个很好的解决方法。
  2. 使用后面的(大量)代码来检索所需的祖先,或者使用默认值。这也有效,我什至不需要转换器。
  3. 将 StackPanel 放入 ContainerUC。StackPanel 用于测试图标大小。无论如何,图标实际上是更复杂的对象,它们会落在多种类型的容器中,而不仅仅是这个 ContainerUC。

我想要的只是了解它是否存在一种避免错误的方法,即使 MultiBindings 中缺少所需的祖先。

尝试FallbackValue="1.0"绑定。仍然收到警告。
试过了TargetNullValue="1.0"。仍然收到警告。
试过了UpdateSourceExceptionFilter="SomeMethod"。仍然收到警告。
试过了NotifyOnValidationError="False"。仍然收到警告。

如果答案是否定的,那么在这种情况下,您的 IconUC UserControl 注定是 ContainerUC 的后代,那么我会接受的。:)


这是转换器的简化版本。但我非常怀疑答案(如果有的话)会落在这里:在转换器处理数据之前就发出警告。

谢谢。