在我的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方法中确定参数或CalcFile类型,但我不知道该怎么做。我得到了投射错误。
似乎发件人是ListBoxItem,但如何将其转换为ViewModel中的Parameter / CalcFile?
我实际上并不想将Parameter / CalcFile带入xaml.cs文件。我宁愿将其与模型分开,只需将其用作中介来处理并将双击事件传递给viewmodel。
哦,是的,我想我可以为不同的标签设置不同的事件处理程序,因此一个用于参数列表,一个用于CalcFile列表,因此我有ParameterListBox_MouseDoubleClick
和CalcFileListBox_MouseDoubleClick
然后ViewModel中的两种不同方法。
答案 0 :(得分:0)
似乎发件人是ListBoxItem,但如何将其转换为ViewModel中的Parameter / CalcFile?
尝试(发件人为ListBoxItem).DataContext
和MVVM,
使用EventToCommand(interactive),你可以找到带有here参数的invoke命令,
答案 1 :(得分:0)
似乎发件人是ListBoxItem,但是如何将它转换为ViewModel中的Parameter / CalcFile?
将ListBox项的DataContext转换为您的类型。像这样:
private void ListBox_MouseDoubleClick(object sender, RoutedEventArgs e)
{
ListBoxItem lbi = sender as ListBoxItem;
CalcFile clickedCalcFile = lbi.DataContext as CalcFile;
if(clickedCalcFile != null)
{
var viewModel = DataContext as YourViewModelType;
viewModel.OpenOnDoubleClick(clickedCalcFile);
}
}