[英]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
,因此當ListBox
的Image
隨選擇更改而更改時, Image
控件的大小可能會更改,因此ListBox
的位置也會更改。
這種情況可能會導致以下效果:放開鼠標按鈕時,單擊的列表項可能與項目位置不同,因此與單擊的列表項不同。
有許多解決方法,例如,固定Image
控件的大小,使用Grid
定義布局或將Image
放在StackPanel
的ListBox
之后
我可以重現該問題,您可以固定圖像大小或將圖像控件移到列表框下方。 我同意埃文
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.