WPF:从ListBox绑定到源的一种方式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF:从ListBox绑定到源的一种方式相关的知识,希望对你有一定的参考价值。
我有一个ListBox,其ItemSsource是一个List,其中X被定义为:
public class X
{
public string FullPath { get; set; }
}
我的ViewModel是
public class ViewModel
{
public List<X> MyList { get; set; }
public X MyItem { get; set; }
public ViewModel()
{
MyList = new List<X>
{
new X { FullPath = "q:\temp\x1.png"},
new X { FullPath = "q:\temp\x2.png"}
};
}
}
和XAML:
<Window x:Class="Bind1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Bind1"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:ViewModel/>
</Window.DataContext>
<StackPanel>
<Image Source="{Binding MyItem.FullPath, Mode=OneWay}" HorizontalAlignment="Left" VerticalAlignment="Top" Stretch="None"/>
<ListBox ItemsSource="{Binding MyList}"
SelectedItem="{Binding MyItem, Mode=OneWayToSource}"
SelectionMode="Single">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FullPath}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Window>
这在我使用ListBox中的键盘向上和向下箭头时会起作用(ListBox中选择的路径中的图像显示在<Image>中)。但是,当我用鼠标单击某个项目时,我没有在ListBox中选中我单击的项目(鼠标单击无效)。正确的图像非常短暂地显示在图像中(几分之一秒),然后显示原始图像。我究竟做错了什么?
答案
由于你正在使用qazxsw poi,而qazxsw poi改变了StackPanel
的选择变化,Image
控件的大小可能会改变,因此也是ListBox
的位置。
当您释放鼠标按钮时,这样的情况可能会导致您单击的列表项不是同一项,因为项位置已更改。
有许多解决方法,例如修复Image
控件的大小,使用ListBox
定义布局,或者简单地将Image
放在Grid
中的Image
之后
另一答案
我可以重现此问题,您可以修复图像大小或将图像控件移动到列表框下方。我同意埃文
以上是关于WPF:从ListBox绑定到源的一种方式的主要内容,如果未能解决你的问题,请参考以下文章