是否可以绑定Silverlight DataTemplate中的事件?如果是这样,最好的方法是什么?
例如,假设您已经创建了一个具有Button的DataTemplate,如下所示:
<UserControl.Resources> <DataTemplate x:Key="MyDataTemplate" > <Grid> <Button Content="{Binding ButtonText}" Margin="4" /> </Grid> </DataTemplate> </UserControl.Resources>
然后,将其应用于ListBox ItemTemplate,如下所示:
<Grid x:Name="LayoutRoot" Background="White"> <ListBox x:Name="lbListBox" ItemTemplate="{StaticResource MyDataTemplate}" /> </Grid>
如果将ListBox的ItemSource设置为类的对象列表:
public class MyDataClass { public string ButtonText{ get; set; } }
那么您如何从列表中的DataTemplate中的每个按钮中点击按钮呢?您可以使用绑定将Click事件绑定到“MyButtonClass”中的方法,如下所示:
<UserControl.Resources> <DataTemplate x:Key="MyDataTemplate" > <Grid> <Button Click="{Binding OnItemButtonClick}" Content="{Binding ButtonText}" Margin="4" /> </Grid> </DataTemplate> </UserControl.Resources>
这会工作吗如果是这样,我应该把什么放在“MyDataClass”中来捕捉事件?
谢谢,
杰夫
解决方法
有几个选项.
一.创建绑定该行的数据对象的自定义控件.在该自定义控件上添加绑定对象的处理程序.
我不认为您对点击的约束将起作用.没有绑定文档,只是声明你的点击字符串.
在控件的页面上添加处理程序.
请记住,如果绑定这种方式,您将只能与该项目的发件人(按钮)一起工作,它是属性.如果您需要获取对象上的特定属性,则可能最好追求第一个选项.
小例子通过在点击事件的列表框中添加10个按钮来演示功能. HTH
DataTemplate XAML
<UserControl.Resources> <DataTemplate x:Name="MyDataTemplate"> <Grid> <Button Click="Button_Click" Content="{Binding ItemText}"/> </Grid> </DataTemplate> </UserControl.Resources>
ListBox XAML
<ListBox x:Name="ListBoxThingee" ItemTemplate="{StaticResource MyDataTemplate}"/>
public class MyClass { public string ItemText { get; set; } } public partial class Page : UserControl { ObservableCollection<MyClass> _Items; public Page() { InitializeComponent(); _Items = new ObservableCollection<MyClass>(); for (int i = 0; i < 10; i++) { _Items.Add(new MyClass() {ItemText= string.Format("Item - {0}",i)}); } this.ListBoxThingee.ItemsSource = _Items; } private void Button_Click(object sender,RoutedEventArgs e) { Button _b = sender as Button; if (_b != null) { string _s = _b.Content as string; MessageBox.Show(_s); } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。