我们有一个使用MVVM模式编写的WPF应用程序.在应用程序中是TabControl,每个选项卡中包含不同的UserControl.在某些情况下,切换到包含选项卡时,选项卡上的某个UserControl可能会占用大量时间.
这不是因为ViewModel中存在任何性能瓶颈.但相反,是由于用户控件绑定到ViewModel并创建其中包含的各种UI元素并初始化它们所花费的大量时间.
当用户单击此用户控件的选项卡时,UI将完全无响应,直到控件完成加载.事实上,在所有内容都加载之前,您甚至都看不到"活动标签".
在等待UI元素完成加载时,我可以使用哪些策略来显示带有某种"请等待,加载..."消息的"微调器"?
更新示例代码:
下面演示了我试图解决的问题类型.当您单击"慢速选项卡"时.在慢速选项卡中的所有项目都已呈现之前,UI将无响应.
在下面,TestVM是慢选项卡的视图模型.它有大量的儿童对象.每个都使用自己的数据模板创建.
如何在慢速标签完成加载时显示"加载"消息?
public class MainVM
{
private TestVM _testVM = new TestVM();
public TestVM TestVM
{
get { return _testVM; }
}
}
/// <summary>
/// TestVM is the ViewModel for the 'slow tab'. It contains a large collection of children objects that each will use a datatemplate to render.
/// </summary>
public class TestVM
{
private IEnumerable<ChildBase> _children;
public TestVM()
{
List<ChildBase> list = new List<ChildBase>();
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 给出了LINQ to SQL .dbml文件中的两个类,具有以下特性.
Customer
CustomerId
FirstName
LastName
AddressId
Address
AddressId
Street
City
State
Zip
Run Code Online (Sandbox Code Playgroud)
您可以构造一个LINQ查询,如下所示.
using(var db = new MyDataContext())
{
results = db.Customers
.Where(c => c.LastName.BeginsWith("o"))
.Select(c => new
{
c.CustomerId,
MailingAddress = c.FirstName + " "
+ c.LastName
+ Environment.NewLine
+ c.Address.Street
+ Environment.NewLine
+ c.Address.City + ", "
+ c.Address.State + " "
+ c.Address.Zip
}).ToList();
}
Run Code Online (Sandbox Code Playgroud)
现在让我们说你想要解释邮件地址的逻辑.您可以实现的两种方法是向Customer类添加新属性,或创建扩展方法.
public static class CustomerExtensions
{
public static string GetMailingAddress(this Customer cust)
{
return cust.FirstName + " "
+ …Run Code Online (Sandbox Code Playgroud) 寻找有关使用 StackExchange.Redis 客户端时处理临时网络问题的指南。
为了澄清起见,我并不是说最初使用 ConnectionMultiplexer.Connect() 连接到 Redis 服务器。我指的是如何处理在操作过程中由于任何原因中断的连接。(我们可以假设命令是幂等的,StringSet、StringGet)
我问这个问题是因为我们正在从 ServiceStack 迁移到 StackExchange 客户端。在我们正在替换的使用 ServiceStack 的代码中,捕获了异常,并且在短暂的 thread.sleep() 后将再次尝试操作。这种情况在我们的生产环境中经常发生,并且在大多数情况下重试都会起作用。
通常它是一个 System.Net.SocketException,带有消息“已建立的连接被主机中的软件中止”或“现有连接被远程主机强制关闭”
如果抛出 System.Net.SocketException,StackExchange.Redis 是否会自动重试,直到达到syncTimeout 时间为止?
如果 SE.Redis 没有自动重试,在我们的代码中,在初始操作失败和重试之间是否应该执行任何建议的步骤?例如:
感谢您的任何指导。
我在ASP.Net Core 2应用程序中使用属性库路由,并尝试根据路由将参数注入Controller.
当我使用该示例时,我收到一条消息的异常:"尝试激活(我的控制器类型)时无法解析类型'System.String'的服务"
[Route("api/agencies/{agencyId}/clients")]
public class ClientDataController : Controller
{
public ClientDataController([FromRoute] string agencyId)
{
}
[HttpGet]
public void SomeAction()
{
}
}
Run Code Online (Sandbox Code Playgroud)
您是否无法在控制器构造函数中使用FromRoute属性?我有别的东西显然是错的吗?
我试图在用C编写并在Windows CE 6.0上运行的应用程序中找到内存泄漏的底部.我怀疑这个问题可能与窗口的paint事件的处理有关.在伪代码中它看起来像这样.
LRESULT CALLBACK HandlePaint(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint (hWnd, &ps);
HFONT logfont;
FONTINFO font1, font2;
memset(&logfont, 0, sizeof(LOGFONT));
//set font options for font1.
font1 = CreateFontIndirect(&logfont);
memset(&logfont, 0, sizeof(LOGFONT));
//set font options for font2.
font2 = CreateFontIndirect(&logfont);
for(int i = 0; i <= SOME_NUMBER; i++)
{
DrawStuff(hdc, font1);
DrawStuff(hdc, font2);
}
EndPaint (hWnd, &ps);
}
INT DrawStuff(HDC hdc, HFONT font)
{
HPEN pen = CreatePen(PS_SOLID, borderWidth, bordercolor); …Run Code Online (Sandbox Code Playgroud) c# ×2
asp.net-mvc ×1
c ×1
gdi ×1
linq ×1
linq-to-sql ×1
mvvm ×1
redis ×1
routing ×1
windows-ce ×1
wpf ×1