问题标签 [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.
wpf - 扩展 Binding 类以提供可绑定的转换器参数
我需要创建一个特定格式的字符串,为此我使用 IMultiValueConverter。例子:
结果是:
这部分不是问题。基本上转换器接受多个字符串,其中第一个是字符串格式,后面是要格式化的字符串。
当某些字符串(绑定)也需要使用 IMultiValue 转换器时,它会变得很棘手。想象一下,属性#Value1# 对于不同的语言有不同的值。通常我们也使用 IMultiValueConverter 获得这样的值:
当用户切换到不同的语言时,字符串字典被更新,并且 TextBox 接收新值(同样适用于将值更改为 Value1)。
现在的问题是:不能在 IMultiValueConverter 中使用 IMultiValueConverter。您也不能覆盖 BindingBase 的 ProvideValue,并且 IMultiValueConverter 将只接受 BindingBase 类型的对象。
有什么办法可以扩展 BindingBase 以便它公开一个 BindableConverterProperty,它的值将用于从 Binding 提供值?
wpf - 具有多个参数的 ValueConverter
我正在尝试编写一个具有三个相关属性的控件:值、最小值和最大值。值会发生变化,但最小值和最大值是固定的。
所以我写了一个IMultiValueConverter:
XAML 如下所示(它是一个自定义控件,因此是 RelativeSource 的东西):
这很好用,但是 ConvertBack 呢?我必须传回三个值……但我只有一个?另外两个是常数,那么我怎么知道它们是什么?
我的另一个可行的解决方案是创建一个名为 Angle 的依赖属性,它在自定义控件中完成所有工作......但暴露了似乎错误的 Angle。
c# - 为什么转换器不运行?
我正在使用 MVVM 模式,在我看来我有这个dataGrid
:
我的视图模型有这个代码:
当我执行该方法MyMethod()
时,如果我没有错,多值转换器将运行,因为当我添加或删除项目时ObservableCollection
执行器INotifyPropertyChanged
,但在这种情况下不起作用。
但是我有另一个我的ObservableCollection
,它按预期工作,当我从.DataSource
dataGrid
dataGrid
ObservableCollection
但是,如果myMethod
我这样做:
它可以工作,所以当我创建一个新的时,视图会被通知ObservableCollection
,而不是当我从实际的ObservableCollecion
.
c# - 如何在转换器中使用行的 IsSelected 属性?
我有一个数据网格,我正在使用这个多值转换器:
但是通过这种方式,我无法获得该行的 IsSelected 属性。如何在我的多值转换器中使用该属性?
c# - 附加属性未触发 IMultiValueConverter
下面是我的 DataGrid,其中包含一些与弹出控件相关联的附加属性。ComboBox 由枚举填充。
这是处理行为的类:
问题出在以下 IMultiValueConverter
当弹出窗口打开和关闭时,它会触发 IMultiValueConverter。
它在文本框文本更改时触发。
但是,如果 ComboBox 中的 SelectedValue 发生更改,则不会触发。
下面是当前触发时输出非常简单的转换器。
[编辑]
[结束编辑]
有人可以解决问题吗?
wpf - 多重绑定似乎不起作用
我看到 MultiBinding 存在问题。下面是代码片段
验证错误最初显示得很好。然后,我有 txtStatusMessage.Text =“创建成功”的代码。
执行此行后,当我给出无效值时,multiBinding 似乎不起作用。我创建的 MultiValueConverter 没有被调用。
我不确定我在这里缺少什么。非常感谢任何帮助。
问候, 曼达
wpf - 从两个单独的列表生成树视图,其中子对象具有父对象的 id
我遇到了一个问题,我在 ViewModel 中有两个单独的 ObservableCollection。一个列表包含以下对象:
另一个列表是:
ViewModel 是这样的:
Type
是 的子节点,TypeCategory
其中与父节点的连接是CategoryId
。是否可以通过使用例如多重绑定和转换器来连接两个列表来生成 TreeView ?或者是扩展父类以包含它的子类的唯一解决方案?
c# - IMultiValueConverter 的 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
wpf - 如何防止使用 MultiValueConverter 的多重绑定多次获取值并使用适当的参数
我想显示有关指定时间尺度(例如小时、分钟、秒)的时间信息。此信息显示在列表框的项目中。为此,我为 ListBoxItem-s 创建了一个自定义 ControlTemplate,例如:
转换器执行以下操作:
问题是,对于某些项目,Convert 方法被调用不止一次,并且在第一次调用时,而不是实际时间值 -DependencyProperty.UnsetValue 作为参数传递,在从输入数组中拆箱值期间导致 InvalidCastException。我怎样才能只实现一次转换并且(至少)使用有效参数?
关于这个问题有一些有趣的评论: 时间的价值是明确定义的。自从 .NET 版本以来,此代码已经运行了很长时间。4.0 但问题现在才出现(至少它开始不断地被客户和我们的测试机器复制)
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”)
这很正常。
如何简单地防止该警告,例如在解析源路径失败时忽略绑定?
我想要的不是解决方法:
- 在 ContainerUC 上使用 DependencyProperty.RegisterAttached,如果没有找到 Ancestor,则在 IconUC 中获取默认元数据值。我知道这是一个很好的解决方法。
- 使用后面的(大量)代码来检索所需的祖先,或者使用默认值。这也有效,我什至不需要转换器。
- 将 StackPanel 放入 ContainerUC。StackPanel 用于测试图标大小。无论如何,图标实际上是更复杂的对象,它们会落在多种类型的容器中,而不仅仅是这个 ContainerUC。
我想要的只是了解它是否存在一种避免错误的方法,即使 MultiBindings 中缺少所需的祖先。
尝试FallbackValue="1.0"
绑定。仍然收到警告。
试过了TargetNullValue="1.0"
。仍然收到警告。
试过了UpdateSourceExceptionFilter="SomeMethod"
。仍然收到警告。
试过了NotifyOnValidationError="False"
。仍然收到警告。
如果答案是否定的,那么在这种情况下,您的 IconUC UserControl 注定是 ContainerUC 的后代,那么我会接受的。:)
这是转换器的简化版本。但我非常怀疑答案(如果有的话)会落在这里:在转换器处理数据之前就发出警告。
谢谢。