IValueConverter是Microsoft .NET XAML中定义的接口,用于WPF和Silverlight。它用于数据绑定,以将数据从一种格式转换为另一种格式。转换可以是单向或双向的。
我一直在 GitHub Copilot 上反复讨论这个问题,并且在 Gemini 和 ChatGPT 上也有几乎相同的经历,所有这些都给了我我已经尝试过的相同的东西,并在 c...
我是 Silverlight 开发新手,遇到了本文标题中描述的问题。我的目标是在单击按钮时显示日期选择器弹出窗口。 有人可以指导我...
我正在尝试绑定到整数属性: 我正在尝试绑定到整数属性: <RadioButton Content="None" IsChecked="{Binding MyProperty, Converter={StaticResource IntToBoolConverter}, ConverterParameter=0}" /> 我的转换器是: [ValueConversion(typeof(int), typeof(bool))] public class IntToBoolConverter : IValueConverter { public object Convert(object value, Type t, object parameter, CultureInfo culture) { return value.Equals(parameter); } public object ConvertBack(object value, Type t, object parameter, CultureInfo culture) { return value.Equals(false) ? DependencyProperty.UnsetValue : parameter; } } 问题是当我的转换器被调用时参数是字符串。我需要它是一个整数。我当然可以解析字符串,但是我必须这样做吗? 感谢您的帮助 康斯坦丁 给你! <RadioButton Content="None" xmlns:sys="clr-namespace:System;assembly=mscorlib"> <RadioButton.IsChecked> <Binding Path="MyProperty" Converter="{StaticResource IntToBoolConverter}"> <Binding.ConverterParameter> <sys:Int32>0</sys:Int32> </Binding.ConverterParameter> </Binding> </RadioButton.IsChecked> </RadioButton> 技巧是包含基本系统类型的命名空间,然后至少以元素形式编写 ConverterParameter 绑定。 为了完整起见,还有一种可能的解决方案(可能需要更少的打字): <Window xmlns:sys="clr-namespace:System;assembly=mscorlib" ...> <Window.Resources> <sys:Int32 x:Key="IntZero">0</sys:Int32> </Window.Resources> <RadioButton Content="None" IsChecked="{Binding MyProperty, Converter={StaticResource IntToBoolConverter}, ConverterParameter={StaticResource IntZero}}" /> (当然,Window可以替换为UserControl,IntZero可以定义得更贴近实际使用的地方。) 不知道为什么WPF人们往往不愿意使用MarkupExtension。它是许多问题的完美解决方案,包括这里提到的问题。 public sealed class Int32Extension : MarkupExtension { public Int32Extension(int value) { this.Value = value; } public int Value { get; set; } public override Object ProvideValue(IServiceProvider sp) { return Value; } }; 如果此标记扩展定义在 XAML 命名空间 'local:' 中,则原始海报的示例将变为: <RadioButton Content="None" IsChecked="{Binding MyProperty, Converter={StaticResource IntToBoolConverter}, ConverterParameter={local:Int32 0}}" /> 这是有效的,因为标记扩展解析器可以看到构造函数参数的强类型并进行相应的转换,而 Binding 的 ConverterParameter 参数是(信息较少的)对象类型。 不要使用value.Equals。用途: Convert.ToInt32(value) == Convert.ToInt32(parameter) 以某种方式在 XAML 中表达 ConverterValue 的类型信息会很好,但我认为目前还不可能。所以我想你必须通过一些自定义逻辑将转换器对象解析为你期望的类型。我看不到其他方法。 这样传递: ConverterParameter={x:Static sys:UInt32.MinValue} sys 是系统命名空间: xmlns:sys="clr-namespace:System;assembly=netstandard"
我有自定义控件,内容模板中包含一些文本: 我有自定义控件,内容模板中包含一些文本: <ControlTemplate TargetType="{x:Type local:TouchScreenKey}"> <TextBlock><ContentPresenter Content="{TemplateBinding Title, Converter={StaticResource CaseConverter}}" /></TextBlock> </ControlTemplate> 和自定义 IValueConverter CaseConverter - 具有 UpperCase 属性。因此,当转换器的 UpperCase 属性设置为 true 时,它会在绑定时将文本转换为大写。如果我在标记中更改大写,一切都会顺利。但是,如果我在运行时更改属性 - 什么也不会发生 - 因为更改转换器属性不会强制我的控件重新绑定。 如何在转换器的属性更改时重新绑定使用转换器的控件? 据我所知,没有办法告诉转换器更新所有目标。转换器对目标一无所知。它只是一个无状态函数,F(x),接受一个值并返回另一个值。 要更新属性,您应该要求 WPF 这样做。例如,如果属性绑定到某个源属性,您可以实现 INotifyPropertyChanged,并触发 PropertyChanged 事件。或者您可以要求 BindingOperations 获取绑定表达式,并手动调用 UpdateTarget()。 也许转换器不是最好的选择?您可能还想考虑使用附加属性来更改大小写。 它可能对某人有帮助 - 我找到了解决方案 - 使用多重绑定 <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"> <ContentPresenter> <ContentPresenter.Content> <MultiBinding Converter="{StaticResource MultiCaseConverter}"> <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Title" /> <Binding ElementName="TouchKeyboard" Path="UpperCase" /> </MultiBinding> </ContentPresenter.Content> </ContentPresenter> 并编写了 MultiCaseConverter - 根据第二个(大写)转换第一个参数
UWP,<Button.IsEnabled><Binding.Source><Binding.Converter>
在 UWP 项目中,我无法像 WPF 中那样访问 IMultiValueConverter。 然后我尝试在 UWP 中实现类似的东西。 这是我正在做的方式: //--------------------------------- 酒吧...
在 ValueConverter 中获取 NullReferenceException
我有以下IValueConverter,StringCaseConverter.cs: 内部密封类 StringCaseConverter : IValueConverter { 公共 bool IsUpperCase { 私有获取;放; } 公共对象Conv...
使用返回 StaticResource Primary 的转换器更改 xaml 中的颜色
如果我做这样的转换器 公共对象?转换(对象?值,类型目标类型,对象?参数,CultureInfo 文化) { 如果(值为空) 返回“粉红色”; 电子...
在 xaml 中更改颜色,转换器返回 StaticResource Primary
如果我做这样的转换器 公共对象?转换(对象?值,类型目标类型,对象?参数,CultureInfo 文化) { 如果(值为空) 返回“粉红色”; 电子...
WPF 中用于可见性绑定的 IValueConverter 永远不会被调用
我想将 WPF 中控件的可见性属性绑定到布尔值。 我写了一个基于IValueConverter的转换器: 命名空间 MyApp.Converter { 使用系统; 使用 System.Windows.D...
我有一个像这样的 ItemsControl 我有一个像这样的ItemsControl <ItemsControl Name="itemsControl"> <ItemsControl.ItemTemplate> <DataTemplate> <ToggleButton Style="{StaticResource ToggleButtonInputControl}"> <Grid> <local:CustomTextBox StringInTextBox="{Binding Path=UIntProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={local:UIntConverter Param=123}}"/> </Grid> </ToggleButton> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> ItemsControl的来源是在代码中设置的,它是ObservableCollection类型的MyClass,具有名为UIntProperty的属性。转换器 UIntConverter 扩展了 MarkupExtension,因此我可以像上面一样使用它,并且有一个名为 uint 的 Param 属性。 目标 目标是使用 UIntProperty 编辑 CustomTextBox。如果未输入数值,则值 UIntProperty 不应更改,如果 StringInTextBox 为空, 该值应设置为 0 并显示该值。 float 类型需要更多条件,但 uint 的情况应该给出最终目标的想法。 我已经尝试过 我可以将依赖属性StringInTextBox与CoerceValueCallback和PropertyChangedCallback一起使用,但根据我的测试,绑定首先触发,因此UIntConverter首先执行,这就是设置UIntProperty的地方。我可以使用中间 string 属性绑定到 StringInTextBox 并使用 set get 方法进行验证,但我必须将中间 string 实现到 MyClass 中的每个属性(许多属性) 。我还可以使 UIntConverter 返回 null 以了解何时保留原始值,但我必须在代码中使 UIntProperty 可以为空。 我想我可以使用 UIntConverter 并传递 original UintProperty,以便转换器可以在需要时返回该值,但我不知道如何将 UIntProperty 传递给 Param,我想UIntProperty 将与绑定处于相同的“范围”,但上面代码中的 Param=UIntProperty 不起作用。 问题 那么,问题是如何将 UIntProperty 传递给 Param 或作为转换器参数?我不知道当 UIntConverter 是 Param 时是否可以将值传递给 StaticResource,如果可能的话该怎么做? 提前致谢。 我认为你应该重新审视使用DependencyProperty的想法。 如果您有自定义控件,则可以定义任意数量的依赖属性,并让自定义控件拥有自己的响应(通过 PropertyChanged、CoerceValueCallback 和 ValidateValueCallback)。 相反,IValueConverter不允许您绑定到转换器参数,因为它不是DependencyProperty。当您构建更多的复杂性(浮动逻辑)时,您会喜欢有空间通过自定义控件添加所需的所有逻辑。 所以,典型的流程是这样的: 决定需要设置多少个属性(多少个单向、双向、单向源) 连接回调,以便控件实例能够响应属性更改。 更新任何只读(单向源)属性) 强制值回调旨在防止无效值。例如,对于滑块,您不能将 Value 设置为超出 Max 或 Min;因此,如果您更新 Min,它应该强制 Value 在范围内。 我的建议是使用 PropertyChanged 回调来添加逻辑。然后将文本属性设置为输入的某种函数(您可能有两个字符串,其中一个是编辑后看到的值,另一个是编辑时看到的值)。 也许您可以添加一个枚举类型属性来指示您想要应用哪些格式化规则(例如 UInt 格式化、Float 格式化等)
我有一个像这样的位字段: [旗帜] 公共枚举 EmployeeType { 无 = 0, 在办公室 = 1, 管理器 = 2, 正在休假 = 4, ... } 我的用户界面有一个所有员工的列表框,我想要...
我为我正在处理的 WPF 应用程序构建了一个自定义窗口镶边。当然,我需要具有用于关闭/最小化/最大化/等的MouseOver-Effects。纽扣。该应用程序的风格应该适合...
我目前正面临使用 WPF MVVM 数据绑定的奇怪问题。 这个想法是使用 ValueConverter 显示绑定值,如果它不为空,否则显示 ConverterParame 中定义的字符串...
WPF数据表格。通过UI编辑已经使用ValueConverter转换的值 [关闭] 。
我有一个数据表格,其中有一列 "总金额"。这是一个双类型,并通过IValueConverter转换为带有"$"符号和逗号的货币类型。(1)但单元格需要可编辑,所以......。
我有一个项目列表,我希望在ListViewGridView中显示。每个项目是一个包含格式和字节数组的类对象。格式决定了字节的显示方式(十六进制或 ...
我正在尝试创建一个可重复使用的用户控件(用于数据输入),其中有两个文本框,并且它们通过IValueConvertor链接到每个文本框。以下XAML是原始的常规代码。 ...
尝试在PowerShell中实现IValueConverter时出错-XAML GUI脚本
我想念的是什么?我试图将转换器实现为基于XAML的PowerShell脚本,但是没有运气。我已经从StackOverflow之类的网站上获取了一些信息。但找不到一个...
Xamarin表格显示IValueConverter编译时出现错误
我想在xamarin表单中为Rg Plugins Popup创建值转换器,它应该显示Yes或No(True / False),但是当我编译时显示:Position 14:14。类型cnv:BoolToStringConverter在...
我试图在不锁定图像文件的情况下在列表视图中加载几百个图像。我希望能够在程序运行时删除文件。我创建了一个自定义图像转换器并将其绑定...