感谢tencntraze的建议,这个问题已经解决了。
请参阅此问题的底部和 tencntraze 的答案以获取解决方案。
我的程序中有一个相当奇怪的错误,我目前正在努力解决它。
我正在开发一个 MVVM 应用程序,我的视图中有一个简单的 ListBox,其 ItemsSource 绑定到字符串的 ObservableCollection。每当我向此集合添加一个项目时,它都会触发一个事件来通知集合已更改,但这在运行时不会反映在 GUI 上,除非我尝试在程序运行时手动调整窗口大小,几乎就像调整窗口大小会强制 GUI 刷新一样。
相关控件的XAML如下
<ListBox ItemsSource="{Binding Path=LogWindow}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0,0,0,0" />
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这是完全正常的。在此视图的 ViewModel 中,我有一个名为 LogWindow 的公共属性,定义如下
public ObservableCollection<string> LogWindow
{
get
{
return _logWindow;
}
set
{
_logWindow = value;
OnPropertyChanged("LogWindow");
}
}
Run Code Online (Sandbox Code Playgroud)
其私人成员如下
private ObservableCollection<string> _logWindow;
Run Code Online (Sandbox Code Playgroud)
在 ViewModel 构造函数中,我初始化 _logWindow 并将 LogWindow CollectionChanged 事件连接到处理程序,该处理程序进而触发 PropertyChanged 通知。
我的代码如下
public MainWindowViewModel(IDialogService dialogService)
{
... skipped for brevity
LogWindow = new ObservableCollection<string>();
LogWindow.CollectionChanged += LogWindow_CollectionChanged;
...
}
Run Code Online (Sandbox Code Playgroud)
CollectionChanged事件处理程序如下
void …Run Code Online (Sandbox Code Playgroud) 我在显示加载到AppDomain.CurrentDomain中的程序集的进度时遇到了一些困难.
我想要做的是显示一个带有进度条的启动画面,我希望能够在每个程序集加载到AppDomain的内存中时更新此进度条.这样,用户将具有关于应用程序启动进度的可视指示符.
我不关心在渲染Splash Screen之前加载程序集,这实际上只是带有进度条的标准WPF窗口.加载启动画面后,我想在装载时报告它们.我没有手动加载这些程序集.
到目前为止,我已经使用以下标记处理了App.xaml中的Startup事件:
Startup="Application_Startup"
Run Code Online (Sandbox Code Playgroud)
启动后面的相应代码如下:
private void Application_Startup(object sender, StartupEventArgs e)
{
SplashScreen.Show<SplashScreen>();
AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoad;
}
void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
SplashScreen.CallSplashScreenMethod<SplashScreen>(x => x.Text(args.LoadedAssembly.GetName().Name));
}
Run Code Online (Sandbox Code Playgroud)
这正如我所期望的那样,显示启动画面,并且在显示启动画面时正在加载的任何组件都显示在屏幕上而没有问题.

这里的问题是我看不到报告正在加载的程序集进度的方法.
程序集似乎没有按任何特定顺序线性加载,因此我不知道如何计算要加载的剩余程序集数量.我看不到一种明显的方法来获取当前正在加载的程序集.
如果我能得到一个尚未由CLR加载的程序集列表,我可以通过使用标准计数来实现进度条
progress = numberOfLoadedAssemblies / totalNumberOfAssemblies * 100;
Run Code Online (Sandbox Code Playgroud)
或者通过实施Chris Marisic关于使用加权平均值的优秀答案的逻辑
我不能做一个简单的" Directory.GetFiles().Length "来获取要加载的程序集总数.原因是因为CLR没有按任何特定顺序加载程序集.它似乎从应用程序根加载一些程序集,然后从GAC加载一些程序集,然后从应用程序根加载更多程序集.
我想知道的是,是否有办法获得要加载的剩余程序集列表.
我正在尝试使用jQuery插件Tablesorter对日期字段进行排序.现在奇怪的是,排序似乎部分工作,它确实重新排列结果显示的顺序,这表明至少,脚本被初始化.

现在我不明白为什么会这样,我的HTML看起来像这样:
<link href="/themes/blue/Style.css" rel="stylesheet" type="text/css" />
<script src="/Scripts/jquery-ui-1.8.20.js" type="text/javascript"></script>
<script src="/Scripts/jquery.tablesorter.js" type="text/javascript"></script>
<script>
$(document).ready(function ()
{
$("#repairtable").tablesorter(
{
sortList: [[1, 0]],
dateFormat : "ddmmyyyy",
headers: { 1:{ sorter: "shortDate", dateFormat: "ddmmyyyy"} }
});
}
);
</script>
<table id="repairtable" class="tablesorter">
<thead>
<tr>
<th>ID</th>
<th>Date In</th>
<th>Customer</th>
</tr>
</thead>
<tbody>
<tr>
<td>48</td>
<td>11/03/2013</td>
<td>Rainhem Launderette</td>
</tr>
<tr>
<td>13</td>
<td>10/01/2013</td>
<td>IESA (Gunstones)</td>
</tr>
<tr>
<td>14</td>
<td>10/01/2013</td>
<td>GVF</td>
</tr>
<tr>
<td>41</td>
<td>08/03/2013</td>
<td>Triumph</td>
</tr>
<tr>
<td>42</td>
<td>08/03/2013</td>
<td>Triumph</td>
</tr>
<tr>
<td>43</td>
<td>08/03/2013</td>
<td>Triumph</td> …Run Code Online (Sandbox Code Playgroud)