[英]Cast ListBox item back to its Collection type
在我的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类型,但是我不知道该怎么做。 我得到演员表错误。
似乎发件人是ListBoxItem,但是如何将其强制转换为ViewModel中的Parameter / CalcFile?
我实际上并不想将Parameter / CalcFile放入xaml.cs文件。 我宁愿将其与模型分开,而只是将其用作中介,以将双击事件传递给ViewModel。
哦,是的,我想我可以为不同的选项卡使用不同的事件处理程序,所以一个用于参数列表,一个用于CalcFile列表,这样我就可以拥有ParameterListBox_MouseDoubleClick
和CalcFileListBox_MouseDoubleClick
,然后在ViewModel中拥有两个不同的方法。
似乎发件人是ListBoxItem,但是如何将其强制转换为ViewModel中的Parameter / CalcFile?
试试(发送者为ListBoxItem).DataContext
对于MVVM,
使用EventToCommand(interactivity),您可以从此处找到带有参数的invoke命令,
似乎发件人是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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.