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绑定到源的一种方式的主要内容,如果未能解决你的问题,请参考以下文章

wpf画面ListBox绑定的数据发生变化时 画面闪烁

WPF 将 ListBox 绑定到枚举,显示描述属性

WPF如何更改xaml代码里ListBox的数据绑定

转:WPF中ListBox的创建和多种绑定用法

WPF中的数据绑定

WPF中的数据绑定