带有转换器的Silverlight MultiBinding,转换器在OnPropertyChange之后不会触发

时间:2012-09-27 15:46:54

标签: c# silverlight binding converter multibinding

在Silverlight项目中使用具有多个绑定的转换器时,我遇到了一些问题。任务是在单击按钮时禁用按钮,具体取决于在自定义转换器中评估四个属性的方式。 任务流程如下:

  • 初始化按钮时触发转换器
  • 单击按钮并在ViewModel中触发命令
  • 在一个viewModel属性中保留按钮ID的记录
  • 在ViewModel中,为三个视图模型属性之一
  • 触发OnPropertyChanged
  • 这应该启动转换器

一切都在最后一步之外。在第二个最后一步中,我可以看到在触发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");}

我实际上只是放置了一个黑客来刷新整个控件,这将重新初始化并重新启动转换器,但任何帮助解决这个问题将非常感激。

0 个答案:

没有答案