我有一个列表框,在该项目模板内,并在该数据模板内(像往常一样)。我的目标 在列表框选择更改事件中,我想将列表框选定项目绑定到图像控件 - 我的代码是 -
ListBox lb = (ListBox)sender;
ListBoxItem item = (ListBoxItem)lb.SelectedItem;
Image im = (Image)item.Content;
Image1.Source = new BitmapImage(((BitmapImage)im.Source).UriSource);
我的ListBox.ItemTemplate
看起来像这样:
<ListBox Name="imageList" Height="556" Width="130" HorizontalAlignment="Left" Style="{StaticResource ListBoxStyle1}" SelectionChanged="imageList_SelectionChanged" >
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Imgs}" Width="100" Height="100"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但它显示异常。 Image1
是我的图像控件,我不想在xaml中绑定图像源。我有一些要求。
答案 0 :(得分:0)
你有例外,因为当你绑定ListBox
,我认为你做了,或者任何ItemsControl
时,Items
,SelectedItem
和{{1}等属性将是一种绑定列表项而不是SelectedItems
,它只是一个容器。如果您需要ListBoxItem
,请参考:
ListBoxItem
但如果var listBox = sender as ListBox;
var lbi = (ListBoxItem)listBox
.ItemContainerGenerator
.ContainerFromItem(listBox.SelectedItem)
属于Image
,则不会像获取DataTemplate
一样容易。同样,它将是一种绑定项,基本上与Content
相同。也许你可以使用它,否则你需要引用SelectedItem
,因为默认情况下,VisualTreeHelper
和ListBoxItem
DataTemplate
之间的可视树中会有其他控件。我感到不安,你不想绑定Image
,但为什么不绑定Image.Source
然后你可以引用你的对象。
如果您想使用ListBox.SelectedItem
图片更新Image1.Source
,那么您的SelectedItem
方法应如下所示:
SelectionChange