Silverlight相当于ListBox的OnDataItemBound()

时间:2010-03-03 16:28:17

标签: silverlight data-binding

我在Silverlight中有一个ListBox,里面有一个项目列表。每个项目都有一定数量的附加选项,其可用性取决于每个项目。

   <ListBox.ItemTemplate>
      <DataTemplate>
         <StackPanel Orientation="Horizontal">                                    
            <TextBlock Text="{Binding Name}" />
            <Button HorizontalAlignment="Right" x:Name="editDiarySecurityButton">
               <Image Source="/xxx.yyy.Silverlight.Common;Component/Resources/Images/Icons/Ribbon/Small/editSecurity.png" Width="16" Height="16" />
            </Button>
         </StackPanel>
      </DataTemplate>                                                           
   </ListBox.ItemTemplate>  
</ListBox>

按钮 editDiarySecurityButton 应根据该项目(代表日记)是否已应用安全性来处理。我可能只是修改图像的不透明度来反映这一点。

我的问题是如何实现这一目标?在ASP.NET中,我已经附加了ItemDataItemBound事件,但我不认为它在WPF / Silverlight中可用。

2 个答案:

答案 0 :(得分:1)

如果我理解了您的要求,您将需要在对象上公开属性,并根据需要使用它来显示您的元素。即,要禁用该按钮,您可能会使用类似IsEnabled =“{Binding HasSecurity}”的内容。

答案 1 :(得分:1)

由于您特别询问了Opacity属性,因此将Button的Opacity属性绑定到DataContext上返回double的属性。添加属性所需的任何逻辑,以返回您对该项目所需的不透明度。像这样:

<Button HorizontalAlignment="Right" x:Name="editDiarySecurityButton"
 Opacity="{Binding Path=ButtonOpacity, Mode=OneWay}"> 
    <Image Source="/xxx.yyy.Silverlight.Common;Component/Resources/Images/Icons/Ribbon/Small/editSecurity.png" Width="16" Height="16" /> 
</Button> 

然后在你的DataContext上:

public double ButtonOpacity
{
    get {return _buttonOpacity; }
}

对要控制的Button的任何其他属性使用相同的构思。