将事件处理程序绑定到自定义对象
本文关键字:自定义 对象 绑定 事件处理 程序 | 更新日期: 2023-09-27 18:25:56
如何将事件处理程序绑定到我创建的自定义对象?
这是我的XAML
<ListBox x:Name="ListData">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,30">
<Image VerticalAlignment="Top" HorizontalAlignment="Left" Source="{Binding Path=TileImage}" Width="175" Height="175" />
<TextBlock Margin="5" Width="200" TextWrapping="Wrap" VerticalAlignment="Top" HorizontalAlignment="Left" Text="{Binding Path=TileName}" FontSize="25"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
背后的代码
// Create collection
ImageTiles = new ObservableCollection<ImageTile>();
// Create each object in the collection
ImageTile RSS= new ImageTile("RSS", "/Images/Hard.jpg");
ImageTile test= new ImageTile("test", "/Images/Hard.jpg");
ImageTile Exam= new ImageTile("Exam", "/Images/Hard.jpg");
ImageTile Settings = new ImageTile("Settings", "/Images/Hard.jpg");
ImageTiles.Add(RSS);
ImageTiles.Add(test);
ImageTiles.Add(Exam);
ImageTiles.Add(Settings);
this.ListData.ItemsSource = ImageTiles;
我想将事件处理程序与每个ImageTile绑定在一起。知道怎么做吗
根据您的代码结构,我会假设您没有使用MVVM或类似的东西来回答,但我绝对建议Silverlight开发使用这种模式。
然而,您的数据源绑定将类似于:
<ListBox x:Name="ListData" ItemsSource="{Binding ImageTiles}">
</ListBox>
您可以在代码隐藏中创建一个通用的单击处理程序,并将Image的单击事件分配给该处理程序。
<ImageButton VerticalAlignment="Top" HorizontalAlignment="Left" Source="{Binding Path=TileImage}" Width="175" Height="175" Click="imageButton_Click" />
然后,您可以在对象上设置一个方法,负责重定向到特定图像平铺的任何必要位置。然后在您的代码后面的处理程序将类似于:
private void imageButton_Click(object sender, RoutedEventArgs e)
{
var imageTile = ((ImageButton)sender).DataContext as ImageTile;
imageTile.RedirectSomewhere();
}
在ViewModel中,添加一个属性以捕获所选项目(例如)
private ImageTile _selectedItem;
public ImageTile SelectedItem
{
get {return _selectedItem;}
set
{
if(value != _selectedItem)
{
_selectedItem = value;
RaisePropertyChanged("SelectedItem");
}
}
}
然后,在XAML中,绑定SelectedItem:
<ListBox ItemsSource="{Binding ImageTiles}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
</ListBox>
使用MVVM Light(或其他方式)将SelectionChanged事件绑定到命令,或为SelectionChanged事件连接事件处理程序。在您的命令(或事件处理程序)中,获取SelectedItem,然后查看第一个属性(您没有告诉我们它的名称,所以我不知道该叫什么)。
在执行任何操作之前,请记住确保SelectedItem不为null,并且在处理完命令后,将SelectedIndex设置为-1,这样他们就可以两次选择同一项,并且仍然可以执行功能。