簡體   English   中英

WPF:一種從ListBox綁定到源的方法

[英]WPF: One way binding to source from ListBox

我有一個ListBox,其ItemSource是一個列表,其中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>中)。 但是,當我用鼠標單擊一個項目時,在列表框中沒有選擇我單擊的項目(鼠標單擊無效)。 正確的圖像會非常短暫地顯示在圖像中(幾分之一秒),然后顯示原始圖像。 我究竟做錯了什么?

由於您正在使用StackPanel ,因此當ListBoxImage隨選擇更改而更改時, Image控件的大小可能會更改,因此ListBox的位置也會更改。

這種情況可能會導致以下效果:放開鼠標按鈕時,單擊的列表項可能與項目位置不同,因此與單擊的列表項不同。

有許多解決方法,例如,固定Image控件的大小,使用Grid定義布局或將Image放在StackPanelListBox之后

我可以重現該問題,您可以固定圖像大小或將圖像控件移到列表框下方。 我同意埃文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM