【发布时间】:2019-02-08 16:33:59
【问题描述】:
我有一个带有多个 ListBox 的窗口,每个 ListBox 使用相同的 KeyDown 事件来确定是否为突出显示的条目按下了删除。我需要获得的是对 ListBox 选定绑定源的引用,因此我可以从中删除选定的值,我可以看到该对象:
var sourceObject = box.ItemsSource;
这只是返回绑定到 ListBox 的项目的 IEnumerable 列表。
如何获取绑定的源属性(参考),以便删除基础值?
这是 xaml:
<ListBox x:Name="listTest1" ItemsSource="{Binding AllTest1Values}" HorizontalAlignment="Left" Height="60" Margin="341,390,0,0" VerticalAlignment="Top" Width="156" KeyDown="ListBox_KeyDown">
<ListBox x:Name="listTest2" ItemsSource="{Binding AllTest2Values}" HorizontalAlignment="Left" Height="60" Margin="341,390,0,0" VerticalAlignment="Top" Width="156" KeyDown="ListBox_KeyDown">
<ListBox x:Name="listTest3" ItemsSource="{Binding AllTest3Values}" HorizontalAlignment="Left" Height="60" Margin="341,390,0,0" VerticalAlignment="Top" Width="156" KeyDown="ListBox_KeyDown">
正如您所见,Event 总是相同的,但绑定不同。这就是为什么我需要找到一种方法来获取对“ListBox_KeyDown”事件处理程序中的绑定的引用。
【问题讨论】:
-
如果您的代码中为列表框对象设置“绑定源”的部分,我会很有帮助。对于 WPF,这可以通过许多不同的方式完成,因此在某些方面很难弄清楚什么对你有用。你能显示那个代码吗?
-
谢谢,我更新了问题。
-
本问题与
wcf无关,请修复标签。每个列表框都应该有自己的事件处理程序,因此您要查找的引用只是sender对象。但请不要使用此引用直接从ItemsSource中删除任何内容,请改用正确的 MVVM。 -
感谢您的关注,已将 c 更改为 p。我很想使用正确的 MVVM,但目前我正在从 winforms 过渡,所以我在这里混合。发送者是ListBox,我这里需要的是ListBox的绑定属性的引用。我需要引用绑定到 ListBox 的原始 OberservableCollection
,我只是不知道 ListBox 是什么,直到事件触发,所以此时我需要获取对实际 ItemsSource 的引用。 -
试图在 WPF 中模拟 Winforms 肯定会导致灾难。您的原始
ObservableCollection<string>在您的视图模型中,因此您可以随时参考它。