我是第一次使用ContentControl
。在只有一个视图模型之前,我的选择发生了变化,只有一个视图模型可以正常工作。现在,我已经添加了ContentControl
以在2个视图模型之间交替,除了<i:Interaction.Triggers>
命令之外,所有命令均有效。我在ExportSelection方法中放置了一个断点,并且断点有时仅会被命中,通常是在选项卡之间切换时出现的(当我在列表视图中选择一个项目时,断点会被命中,因此选项卡的更改不会影响它吗?)。
我的configviewmodel中有两个按钮,可以在更改选择的情况下在两个视图模型之间切换。
第一个按钮设置ExportsViewModel:
_MainWindow.MainWindowContent.Content = ManifestViewModel.This;
_MainWindow.MainWindowExportContent.Content = ExportViewModel.This;
第二个视图模型:
_MainWindow.MainWindowContent.Content = WeKnowViewModel.This;
_MainWindow.MainWindowExportContent.Content = WeKnowExportViewModel.This;
ListView:
<ListView x:Name="lvExport" MaxHeight="900" VirtualizingPanel.IsVirtualizing="True" ToolTip="Double click to send to Trio" VirtualizingPanel.VirtualizationMode="Recycling" SelectionMode="Extended" AlternationCount="2" ItemsSource="{Binding CurrentExportItem, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True" Visibility="{Binding Path=IsVisibleExport, Converter={StaticResource BoolToVis} }" ItemContainerStyle="{DynamicResource stLbItem}" Height="509" VerticalAlignment="Top" >
<ListView.View>
</ListView.View>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding ExportSelectionChangedCommand}" CommandParameter="{Binding ElementName=lvExport}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
内容控制:
<Grid Margin="435,0,0,0" Height="420" VerticalAlignment="Top" HorizontalAlignment="Left" Width="1109">
<ContentControl Name="MainWindowExportContent" Margin="0,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"></ContentControl>
</Grid>
数据模板:
<DataTemplate DataType="{x:Type viewModel:ExportViewModel}">
<views:ExportView x:Name = "ExportViewControl" Loaded = "ExportViewControlFunc" Margin="0,0,0,0" VerticalAlignment="Top" Width="auto" Height="auto" />
</DataTemplate>
<DataTemplate DataType="{x:Type viewModel:WeKnowExportViewModel}">
<views:WeKnowExportView x:Name = "WeKnowExportViewControl" Loaded = "WeKnowExportViewControlFunc" Margin="0,0,0,0" VerticalAlignment="Top" Width="auto" Height="auto" />
</DataTemplate>
缩小的ViewModel:
class ExportViewModel : ViewModelBase
{
static ExportViewModel _this = new ExportViewModel();
public static ExportViewModel This
{
get { return _this; }
}
public void Initialise()
{
This.ExportSelectionChangedCommand = new RelayCommand(This.ExportSelectionChanged);
}
public RelayCommand ExportSelectionChangedCommand
{
get;
set;
}
void ExportSelectionChanged(object parameter)
{
try
{
//Don't let more than 6 items be selected at once, because the container only has space for 6
ListBox listBox = parameter as ListBox;
if (listBox.SelectedItems.Count > 20)
{
listBox.SelectedItems.RemoveAt(listBox.SelectedItems.Count - 2);
}
//Clear out the out list of items and add the new ones so we can use them to build to a single template in viz
This.SelectedExport = new ObservableCollection<Item2>();
This.SelectedExport.Clear();
foreach (Item2 mJ in listBox.SelectedItems)
{
This.SelectedExport.Add(mJ);
}
if (listBox.SelectedItems.Count < 2)
{
This.SelectedCount = listBox.SelectedItems.Count.ToString() + " Item selected";
}
else
{
This.SelectedCount = listBox.SelectedItems.Count.ToString() + " Items selected";
}
}
catch (Exception ex)
{
LogViewModel.This.WriteCurrentErrorOrWarningToXmlFile(ex.Message, "ExportSelectionChanged");
}
}
private static ObservableCollection<SocialExportJSON> _ExportItems;
public ObservableCollection<SocialExportJSON> ExportItems
{
get => _ExportItems;
set
{
if (_ExportItems != value)
{
_ExportItems = value;
OnPropertyChanged();
}
}
}
private static ObservableCollection<Item2> _CurrentExportItem = new ObservableCollection<Item2>();
public ObservableCollection<Item2> CurrentExportItem
{
get => _CurrentExportItem;
set
{
if (_CurrentExportItem != value)
{
_CurrentExportItem = value;
OnPropertyChanged();
}
}
}
public void UpdateData(ManifestItem manifestItem, bool IsUpdated)
private ObservableCollection<Item2> _SelectedExport;
public ObservableCollection<Item2> SelectedExport
{
get => _SelectedExport;
set
{
if (_SelectedExport != value)
{
_SelectedExport = value;
OnPropertyChanged();
}
}
}
}