UpdateSourceTrigger=PropertyChanged 绑定到与绑定属性不同的属

假设我绑定到控件的可见性:

Visibility="{Binding Path=Name, Converter={StaticResource NameToVisibilityConverter}}"

有了这个,它在应用程序第一次启动时运行良好,但是当NameToVisibilityConverter更改中的某个参数导致可见性不同,但Name可见性必须保持不变时,转换器不会重新触发。我可以试试这个:

Visibility="{Binding Path=Name, Converter={StaticResource NameToVisibilityConverter}, UpdateSourceTrigger=PropertyChanged}"

添加 aUpdateSourceTrigger=PropertyChanged对这种情况没有帮助,因为它Binding Path=.是相同的并且不会触发 valueconverter 再次转换。

如何更改的属性,UpdateSourceTrigger=PropertyChanged使其在不同的属性上触发Name(我想要实现的就像UpdateSourceProperty与当前绑定不同的属性):

Visibility="{Binding Path=Name, Converter={StaticResource NameToVisibilityConverter}, UpdateSourceTrigger=PropertyChanged, UpdateSourceProperty={Binding Path=Count}"

谢谢!如果有什么需要澄清的,请告诉我。底线是我需要一个 valueConverter 比绑定属性更改的频率更频繁。


慕姐8265434
浏览 292回答 2
2回答

紫衣仙女

如何更改 U 的属性,pdateSourceTrigger=PropertyChanged使其在与 Name 不同的属性上触发(我想要实现的就像UpdateSourceProperty与当前绑定不同的属性):转换器仅在数据绑定属性更改时调用。更改的值UpdateSourceTrigger不会改变任何东西。MultiBinding您可以做的是使用一个和一个多值转换器绑定到多个属性,例如:<SomeControl.Visibility>&nbsp; &nbsp; <MultiBinding Converter="{StaticResource NameToVisibilityConverter}">&nbsp; &nbsp; &nbsp; &nbsp; <Binding Path="Name" />&nbsp; &nbsp; &nbsp; &nbsp; <Binding Path="SomeOtherPropertyThatShouldTriggerTheConverter" />&nbsp; &nbsp; </MultiBinding></SomeControl.Visibility>然后,您的转换器类应该实现IMultiValueConverter接口而不是IValueConverter接口。

慕桂英4014372

首先,UpdateSourceTrigger 与你需要的效果无关。它用于在窗口中更改属性时更新源(在您的情况下为名称)。如果您希望在更改源时更改属性,您应该首先在模型类中实现 INotifyPropertyChanged 接口。class Model{&nbsp; &nbsp; private string name;&nbsp; &nbsp; public string Name&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; get=>name;&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name = value;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OnPropertyChanged(nameof(Name));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; public event PropertyChangedEventHandler PropertyChanged;&nbsp; &nbsp; public void OnPropertyChanged(string prop = "")&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));&nbsp; &nbsp; }}然后,如果您将 Name 属性绑定到窗口中的某个控件属性,则每次设置此属性时,它将触发PropertyChanded该属性的事件Name并更新绑定。如果属性依赖于模型中的多个属性并且应该在任何模型属性更改时更新,最合乎逻辑的方法是使用MultiBindingwith IMultiValueConverter。但如果由于某种原因你不想或不能这样做,你可以开火OnPropertyChanged(nameof(Name))每次不仅更改名称,还更改控件所依赖的其他属性。然后绑定将更新,就好像您更改了名称一样。
打开App,查看更多内容
随时随地看视频慕课网APP