【发布时间】:2016-12-13 04:08:48
【问题描述】:
在我的 XAML 中,我有两个选项卡,第一个包含绑定到 ObservableCollection 对象的 ListBox,称为 ParameterFilesList,第二个包含绑定到 ObservableCollection 对象的 ListBox,称为 CalcFilesList。
<UserControl x:Class="Sym.VisualStudioExtension.Engines.TAEngineView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:behaviours="clr-namespace:Sym.VisualStudioExtension"
xmlns:local="clr-namespace:Sym.VisualStudioExtension"
local:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d"
d:DesignHeight="700" d:DesignWidth="400">
<Grid>
<TabControl x:Name="tabControl" HorizontalAlignment="Left" Height="490" Margin="19,44,-36,-234" VerticalAlignment="Top" Width="317">
<TabItem Header="Parameter Files">
<ListBox Margin="20" ItemsSource="{Binding ParameterFilesList}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</TabItem>
<TabItem Header="Calc Files">
<ListBox Margin="20" ItemsSource="{Binding CalcFilesList}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</TabItem>
</TabControl>
<Label x:Name="label" Content="{Binding Path=Title}" HorizontalAlignment="Left" Margin="19,13,0,0" VerticalAlignment="Top" Width="367
" BorderThickness="2"/>
</Grid>
当我双击一个项目时,我想打开列表中名称显示的基础文件。首先,我需要将列表项返回到 Parameter/CalcFile 对象。
目前,我在代码隐藏中处理双击:
private void ListBox_MouseDoubleClick(object sender, RoutedEventArgs e)
{
dynamic viewModel = DataContext;
viewModel.OpenOnDoubleClick(sender, e);
}
然后我的想法是在ViewModel的OpenOnDoubleClick方法中确定Parameter或者CalcFile类型,但是不知道怎么做。我收到演员表错误。
看来sender是ListBoxItem,但是如何在ViewModel中将其转换为Parameter/CalcFile呢?
我实际上不想将 Parameter/CalcFile 带入 xaml.cs 文件。我希望将其与模型分开,并将其用作处理双击事件并将其传递给视图模型的中介。
哦,是的,我想我可以为不同的选项卡设置不同的事件处理程序,因此一个用于参数列表,一个用于 CalcFile 列表,这样我就有ParameterListBox_MouseDoubleClick 和CalcFileListBox_MouseDoubleClick,然后有两种不同的方法ViewModel。
【问题讨论】: