在Silverlight项目中使用具有多个绑定的转换器时,我遇到了一些问题。任务是在单击按钮时禁用按钮,具体取决于在自定义转换器中评估四个属性的方式。 任务流程如下:
一切都在最后一步之外。在第二个最后一步中,我可以看到在触发OnPropertyChanged后再次访问该属性。所以我无法理解为什么绑定不会选择此更改并触发转换器。我想这可能是因为按钮项在数据网格中,而绑定使用Path&的ElementName。
我正在使用来自here的Silverlight 5的MultiBinding解决方案。
我见过this question但其解决方案在Silverlight(Binding.IndexerName)中不可用。
所以在实际控件上我有一个datagrid,其中每一行都有一个文本块和一个按钮。
Button IsEnabled绑定到一个转换器,其中包含来自ViewModel(属性A-C)的三个值和一个来自datagrid.ItemSource(Id)的值。
<Button Tag="{Binding Id}"
IsEnabled="{multibinding:MultiBinding Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
Source1={Binding Path=DataContext.PropertyA, ElementName=LayoutRoot},
Source2={Binding Path=DataContext.PropertyB, ElementName=LayoutRoot},
Source3={Binding Id},
Source4={Binding Path=DataContext.PropertyC, ElementName=LayoutRoot},
Converter={StaticResource myConverter}}">
Button Click事件绑定到viewModel上的命令。
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding Path=DataContext.ClickCommand, ElementName=LayoutRoot}"
CommandParameter="{Binding Id}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
在viewModel中触发OnPropertyChanged事件
public void OnClickCommand(int Id)
{OnPropertyChanged("PropertyA");}
我实际上只是放置了一个黑客来刷新整个控件,这将重新初始化并重新启动转换器,但任何帮助解决这个问题将非常感激。