C# WPF:从ListBox到源的单向绑定
我有一个列表框,其ItemSource是一个列表,其中X定义为:C# WPF:从ListBox到源的单向绑定,c#,wpf,xaml,listbox,selecteditem,C#,Wpf,Xaml,Listbox,Selecteditem,我有一个列表框,其ItemSource是一个列表,其中X定义为: public class X { public string FullPath { get; set; } } 我的模型是 public class ViewModel { public List<X> MyList { get; set; } public X MyItem { get; set; } public ViewModel() { MyList =
public class X
{
public string FullPath { get; set; }
}
我的模型是
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"}
};
}
}
公共类视图模型
{
公共列表MyList{get;set;}
public X MyItem{get;set;}
公共视图模型()
{
MyList=新列表
{
新的X{FullPath=“q:\\temp\\x1.png”},
新建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>
当我在列表框中使用键盘上下箭头时(列表框中选择的路径中的图像显示在列表框中),这一点就起作用了。但是,当我用鼠标单击某个项目时,我单击的项目不会在列表框中被选中(鼠标单击无效)。正确的图像在图像中显示得非常短暂(几分之一秒),然后显示原始图像。我做错了什么?因为您使用的是
StackPanel
,当列表框
中的选择发生变化时,图像
控件的大小可能会发生变化,因此列表框
的位置也会发生变化
这种情况可能会导致当您释放鼠标按钮时,由于项目位置发生更改,您单击的列表项目不是同一项目
有许多解决方法,例如,固定
图像
控件的大小,使用网格
定义布局,或者简单地将图像
放在堆栈面板
中的列表框
之后,因为您使用的是堆栈面板
,当图像
在列表框
中的选择改变时会改变,而图像
控件的大小可能会改变,因此列表框
的位置也会改变
这种情况可能会导致当您释放鼠标按钮时,由于项目位置发生更改,您单击的列表项目不是同一项目
有许多解决方法,例如,固定
图像
控件的大小,使用网格
定义布局,或者简单地将图像
放在堆栈面板中的列表框
之后我无法重现您的问题。使用给定的代码,它可以在我的系统上完美地运行。我刚刚在我的系统中运行了您的代码,它工作正常,单击和键盘导航事件都工作正常。您可能需要为图像设置宽度和高度,并拉伸以填充图像,以防图像的原始宽度和高度非常大。我无法重现您的问题。使用给定的代码,它可以在我的系统上完美地运行。我刚刚在我的系统中运行了您的代码,它工作正常,单击和键盘导航事件都工作正常。您可能需要为图像设置宽度和高度,并拉伸以填充图像,以防图像的原始宽度和高度非常大。谢谢-这确实是个问题。谢谢-这确实是个问题。