2010-03-03 49 views
0

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

<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中可用。

回答

1

由于您特别询问了不透明度属性,将Button的不透明属性绑定到您的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; } 
} 

使用与要控制按钮的任何其他财产同样的想法。

+0

谢谢。你知道,我还在进入这个WPF百灵。我从来没有这样想过。猜猜最好的办法是对我的数据进行分类。虽然我的课程是来自EF/WCF的DTO,但我想我可能只需要包装它。不幸的是,我只能选择一个答案! – 2010-03-03 21:29:32

1

如果我明白你在问什么,你会想要在对象上公开一个属性并根据需要使用它来呈现你的元素。即要禁用按钮,您可以使用IsEnabled =“{Binding HasSecurity}”之类的东西。