我有一个ComboBox设置来显示ApplicationNames的绑定列表。 ComboBox绑定的列表类型是procedure TForm6.PrintDocumentClick(Sender: TObject);
var
iPrintOptions: Integer;
begin
DPL := TDebenuPDFLibrary1115.Create;
try
UnlockResult := DPL.UnlockKey('...'); // Add trial license key here
if UnlockResult = 1 then
begin
// Load your file
DPL.LoadFromFile('test.pdf', '');
// Configure print options
iPrintOptions := DPL.PrintOptions(0, 0, 'Printing Sample');
// Print the current document to the default printing
// using the options as configured above
DPL.PrintDocument(DPL.GetDefaultPrinterName(), 1, 1, iPrintOptions);
end;
finally
DPL.Free;
end;
end;
。我正在使用CollectionViewSource进行排序:
ObservableCollection<Apps>
ComboBox写成:
<CollectionViewSource
x:Key="Apps"
Source="{Binding Path=Apps}"
>
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="AppNames" Direction="Ascending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
现在,当我打开容纳此组合框的视图时,所有应用程序名称都在组合框中正确显示并进行排序。我遇到的问题是当我关闭该视图然后重新打开视图时。当我重新打开视图时,所有内容都像第一次一样完全加载,就像我如何获得ObervableCollection一样,但这次没有出现在ComboBox中。此外,在ViewModel中,我确实清除了集合,并在View和ViewModel关闭时删除所有已注册的事件。
这是我关闭的地方:
<ComboBox
SnapsToDevicePixels="True"
Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" Grid.RowSpan="1"
DataContext="{StaticResource Apps}"
ItemsSource="{Binding}"
ItemContainerStyle="{StaticResource ApplicationItemStyle}"
ItemTemplate="{StaticResource applicationComboTemplate}"
>
</ComboBox>
如果我从CollectionViewSource复制void CleanUpApps()
{
if (this.Apps != null)
{
foreach (var app in this.Apps)
app.Dispose();
this.Apps.Clear();
this.Apps.CollectionChanged -= OnAppsCollectionChanged;
}
}
并将其放在ComboBoxes DataContext中的{Binding Path=Apps}
上,那么一切正常,当然,除了现在的排序,我第一次打开视图时以及每次之后。
我试图找出我在CollectionViewSource中做错了什么,这导致第二次加载视图时没有在组合框中显示任何应用程序名称。