我需要更改控件的状态然后执行一些操作.具体来说,我想在隐藏控件之前运行动画.我想做那样的事情:
VisualStateManager.GoToState(control, "Hidden", true); // wait until the transition animation is finished
ParentControl.Children.Remove(control);
Run Code Online (Sandbox Code Playgroud)
问题是过渡动画是异步运行的,因此在动画启动后立即从可视树中删除控件.
那我该如何等待动画完成呢?
我正在通过写一个家庭图书馆经理来学习C#.
我有一个BookController,它将书籍存储在数据结构中并对它们执行操作.
C#是否有办法将字典中的数据保存到本地文件(可能是XML格式)以便稍后加载,或者我是否必须自己编写?
保存和加载C#可用数据的最佳方法是什么?只需指出一个好的方向.
我有一个带有许多DataGrids(来自Silverlight Toolkit)的SL应用程序,每个都有自己的视图.如果打开了几个DataGrids,则在视图之间进行更改(例如TabItems)需要很长时间(几秒钟)并冻结整个应用程序(UI线程).
加载的DataGrids越多,更改所需的时间就越长.这些缓慢UI功能的DataGrids可能在应用程序的其他位置,甚至在那一刻都不可见.但是一旦它们被打开(并加载了数据),它们就会减慢显示其他DataGrids的速度.请注意,DataGrids不会被处理,然后再次重新创建,它们仍然保留在内存中,只有它们的父控件被隐藏并再次可见.
我已经分析了该应用程序.它表明agcore.dll的SetValue函数是瓶颈.遗憾的是,调试符号不适用于负责绘图的Silverlight本机库.
问题不在DataGrid控件中 - 我试图用XCeed的网格替换它,并且更改视图时的性能更差.
你知道如何解决这个问题吗? 为什么更多打开控件会减慢其他控件?
更新:在提供的示例上使用VS11分析器表明问题可能是多次调用MeasureOverride(对于每个DataGridCell,我猜).但是,为什么它会在其他地方加载更多控件时变慢?有没有办法改善表现?
更新2:我应该提到我不在我的特定应用程序中使用TabControl.我使用Caliburn.Micro和ContentControl来显示当前活动的ViewModel.但同样的问题是TabControl所以我用它来描述核心问题.
系统内存异常.我看到内存Stream只在保存时刷新.我们有1.5 - 2GB的数据集.
我使用的是EPPlus版本3.1.3.0
我们在代码中执行以下操作.
我们循环
--> Create a Package
--> each table in the datareader
--> Add WorkSheet to the Package
--> Dispose Each table.
--> Save the Package.
Run Code Online (Sandbox Code Playgroud)
每个数据表的大小为300Mg,最多15个表格.
这导致了一个问题,我已经详细记录了这个@ https://epplus.codeplex.com/workitem/15085
我仍然希望能够使用EPPlus非常好的API.但是,一旦我们将工作表添加到包中,就有更好的方法来释放工作表.
谢谢你的帮忙.
我很难过 - 升级到Entity Framework 7,我通常会覆盖其中的SaveChanges,DbContext以便能够在更改之前获取所有修改对象的列表.最终,我有一个触发跟踪数据库中先前版本的脚本.在Entity Framework 6中,我会得到模型更改,如下所示:
var oc = ((IObjectContextAdapter)this).ObjectContext;
var modifiedItems = oc.ObjectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Deleted);
List<ObjectStateEntry> ModifiedObjlist = modifiedItems.ToList();
Run Code Online (Sandbox Code Playgroud)
但是现在已经ObjectContext在Entity Framework 7中删除了,我被困住了,我将如何在Entity Framework 7中获取修改对象的列表?
我正试图了解DI/IoC,NHibernate并让它们在我正在开发的应用程序中很好地协同工作.我对NHibernate和DI/IoC都很陌生,所以不太确定我所做的是否是合理的方式.这是场景:
该应用程序为用户提供了计算特定金融交易的特定值(称为保证金)的能力.每个事务的marging值的计算是通过抽象MarginCalculator类的具体实现来执行的,并且要使用的具体实现取决于特定事务的产品类型(由产品对象的某个字段给出).具体的计算器类可通过产品类的属性访问.即
public class Transaction
{
private double _margin;
private Product _product;
private Client _client;
public double Margin { get; }
public Product Product { get; }
public Client Client { get; }
public Transaction(Product p, Client c)
{
_product = p;
_client = c;
}
public void CalculateMargin()
{
_margin = _product.MarginCalculator.CalculateMargin();
}
}
public class Product
{
private string _id;
private string _productType;
... Other fields
public string Id { get; }
public string ProductType { get; } …Run Code Online (Sandbox Code Playgroud) 我们正在使用Entity框架编写WPF应用程序(准确地说,Silverlight与RIA服务).我们通过应用程序使用共享的ObjectContext,这样我们就可以从跨模块共享数据中受益.
问题是 - 如果用户在工作期间打开让我们说历史销售,它会被加载到ObjectContext并保持到应用程序结束.所以应该使用另一种模式.
我知道ObjectContexts应该用作单个工作单元.但是,您如何让应用程序的其他部分知道某些内容已发生变化并且应该重新加载数据?
编辑:好的,EventAggregator,但是,这将导致所有其他部分重新加载他们的(可能大部分重复)数据.也许所有类型的参与团体都需要许多活动.
你是如何解决这些问题的?我当前的解决方案是一种妥协 - 使用共享的ObjectContext作为整个应用程序使用的核心数据,以便它们可以自动共享和更新.对于大量数据,请使用新的单独ObjectContext.有更好的想法吗?
有没有办法如何从DataContext中"释放"实体,以便垃圾收集器可以完成其工作并释放内存?
c# ×5
.net ×2
silverlight ×2
wpf ×2
datagrid ×1
dbcontext ×1
epplus ×1
excel ×1
excel-2007 ×1
nhibernate ×1
performance ×1