如何简单地将其绑定到ConverterParameter?

问题描述 投票:24回答:2

我有问题,我不知道如何解决这个简单问题,我有很多这样的观点,因此解决方案应该不复杂。

我有带有设置和主要XAML的主项目。

我具有绑定转换器和XAML文件的依赖项目,看起来像:

<TextBlock Text="{Binding X.Y.Z, 
                 Converter={StaticResource ProbabilityConverter},                 
                 ConverterParameter=??????????????, Mode=OneWay}"
 />

此XAML文件由主要项目的主要XAML文件加载。

我必须将一个属性的值从设置的值传递给ConverterParameter,此参数可以在运行时更改,然后必须为Binding,在这种情况下,Binding我只能对DependencyProperty执行此操作。

我必须对此设置属性进行DependencyProperty包装才能解决此问题?

[当我尝试在Binding中设置ConverterParameter时,我将在运行时收到此异常:

无法在类型的'ConverterParameter'属性'捆绑'。只能设置“绑定”在一个的DependencyProperty上DependencyObject。

c# data-binding dependency-properties
2个回答
23
投票

您可以绑定到任何属性,它不必是依赖项属性。但是,如果您希望用户界面在发生更改时立即反映出属性中的更改,则有两种选择:

  1. 将属性设为依赖项属性。
  2. 在保存属性的类型上添加INotifyPropertyChanged并在属性更改时引发INotifyPropertyChanged事件。

编辑:

正如问题编辑中所指出的那样,不可能绑定到PropertyChanged。但是您可以使用ConverterParameter。例如,假设您要绑定一个日期,并指定转换器的区域性规范作为参数,并在区域性更改时刷新绑定(我不确定这是个好主意,但可以很好地用作示例)。您可以这样做:

MultiBinding

这里,<TextBlock> <TextBlock.Resources> <local:DateCultureConverter x:Key="converter" /> </TextBlock.Resources> <TextBlock.Text> <MultiBinding Converter="{StaticResource converter}"> <Binding Path="Date" /> <Binding Path="Settings.Culture" /> </MultiBinding> </TextBlock.Text> </TextBlock> Date都是当前Settings的属性。 DataContext实现了DateCultureConverter,您可能会在实际应用程序中将其放在资源中仅几层级。


8
投票

您可以使用以下解决方案之一:

© www.soinside.com 2019 - 2024. All rights reserved.