假设我要绑定到控件的可见性:
Visibility="{Binding Path=Name, Converter={StaticResource NameToVisibilityConverter}}"
这样,它在应用程序首次启动时效果很好,但是当NameToVisibilityConverter
中的某个参数发生更改导致可见性有所不同时,但可见性却绑定到了Name
保持不变,不会重新触发转换器。我可以尝试一下:
Visibility="{Binding Path=Name, Converter={StaticResource NameToVisibilityConverter}, UpdateSourceTrigger=PropertyChanged}"
添加UpdateSourceTrigger=PropertyChanged
对这种情况没有帮助,因为Binding Path=.
相同,并且不会触发valueconverter再次转换。
如何更改UpdateSourceTrigger=PropertyChanged
的属性,使其在与Name
不同的属性上触发(我想要实现的属性类似于与当前绑定不同的UpdateSourceProperty
属性) :
Visibility="{Binding Path=Name, Converter={StaticResource NameToVisibilityConverter}, UpdateSourceTrigger=PropertyChanged, UpdateSourceProperty={Binding Path=Count}"
谢谢!请让我知道是否需要澄清。最重要的是,我需要一个valueConverter来进行转换,而不是更改绑定属性的频率。
答案 0 :(得分:1)
如何更改U
pdateSourceTrigger=PropertyChanged
的属性,使其在不同于Name的属性上触发(我想要实现的属性类似于与当前绑定不同的UpdateSourceProperty
属性):>
仅当数据绑定属性更改时,才调用转换器。更改UpdateSourceTrigger
的值不会更改任何内容。
您可以做的是使用MultiBinding
和一个多值转换器将多个属性绑定,例如:
<SomeControl.Visibility>
<MultiBinding Converter="{StaticResource NameToVisibilityConverter}">
<Binding Path="Name" />
<Binding Path="SomeOtherPropertyThatShouldTriggerTheConverter" />
</MultiBinding>
</SomeControl.Visibility>
然后,您的转换器类应实现IMultiValueConverter
接口,而不是IValueConverter
接口。
答案 1 :(得分:0)
首先,UpdateSourceTrigger与您所需的效果无关。当您在窗口中更改属性时,它用于更新源(在您的情况下为Name)。如果要在更改源时更改属性,则应首先在模型类中实现INotifyPropertyChanged接口。
class Model
{
private string name;
public string Name
{
get=>name;
set
{
name = value;
OnPropertyChanged(nameof(Name));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string prop = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
}
}
然后,如果将Name属性绑定到窗口中的某些控件属性,则每次设置此属性时,它将触发PropertyChanded
属性的Name
事件,并且绑定将被更新。 / p>
如果属性取决于模型中的几个属性,并且在更改任何模型属性时都应更新,则最合乎逻辑的方法是将MultiBinding
与IMultiValueConverter
一起使用。但是,如果由于某种原因您不想要或不能做到,您可以开枪
OnPropertyChanged(nameof(Name))
每次您不仅更改名称,还更改控件所依赖的其他属性。然后绑定将更新,就好像您更改了名称一样。