如何将事件处理程序绑定到我创建的自定义对象?
这是我的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绑定在一起。知道怎么做吗? =)
答案 0 :(得分:1)
基于你的代码结构,我会回答假设你没有使用MVVM之类的东西,但是我肯定会推荐Silverlight开发的模式。
然而,您的数据源绑定类似于:
<ListBox x:Name="ListData" ItemsSource="{Binding ImageTiles}">
</ListBox>
您可以在后面的代码中创建一个通用的点击处理程序,并将Image的click事件分配给该处理程序。
<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();
}
答案 1 :(得分:1)
在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事件连接事件处理程序。在你的Command(或事件处理程序)中,获取SelectedItem,并查看第一个属性(你没有告诉我们它被调用了什么,所以我不知道该怎么称呼它。)
请记住在执行任何操作之前确保SelectedItem不为null,并且当您完成处理命令后,将 SelectedIndex 设置为-1,以便他们可以选择相同的项目两次,仍然可以获得执行的功能。