小编Nic*_*ick的帖子

WPF绑定到父DataContext

我们有一个带有标准MVVM模式的WPF应用程序,利用Cinch(以及MefedMVVM)进行View - > ViewModel解析.这很好用,我可以将相关控件绑定到ViewModel上的属性.

在特定的视图中,我们有一个Infragistics XamGrid.此网格绑定到ViewModel上的ObservableCollection,并显示相应的行.但是,我在这个网格上有一个特定的列,我试图将TextBox文本值绑定到父DataContext上的属性,而不是ObservableCollection.这种绑定失败了.

我们在这里经历了几个选项,包括:

  1. 使用AncestorType跟踪树并绑定到父UserControl的DataContext,如此(从这个问题的答案很好,以及这个)...

    {Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
    
    Run Code Online (Sandbox Code Playgroud)
  2. 指定ElementName并尝试直接定位顶级控件.有一个看看这里,如果你想了解使用的ElementName.

  3. 使用UserControl资源中定义的"代理"FrameorkElement尝试根据需要"传入"上下文.我们将元素定义如下,然后作为静态资源引用...

    <FrameworkElement x:Key="ProxyContext" DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource Self}}"></FrameworkElement>
    
    Run Code Online (Sandbox Code Playgroud)

在这种情况下,绑定会找到FrameworkElement,但不能访问除此之外的任何内容(指定Path时).

阅读之后,很可能这是由树外的Infragistics XamGrid构建列引起的.但是,即使是这种情况,至少应该选择2或3.

我们最后的想法是它与V-VM绑定有关,但即使使用Snoop,我们还没有找到确切的问题.我绝不是WPF绑定的专家所以任何指针都会受到赞赏.

编辑:我在这里找到了一些来自Infragistics的模板示例,我将尝试.

编辑2:正如@Dtex所指出的,模板是可行的方法.以下是与XamGrid一起使用的相关代码段:

<ig:GroupColumn Key="CurrentDate">
                <ig:GroupColumn.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=DataContext.CurrentDateTest, RelativeSource={RelativeSource AncestorType=UserControl}}" />
                    </DataTemplate>
                </ig:GroupColumn.HeaderTemplate>
                <ig:GroupColumn.Columns>
Run Code Online (Sandbox Code Playgroud)

我已经打开了XML ...你只需要添加你想要的列,然后关闭相关的标签.

c# wpf binding

44
推荐指数
1
解决办法
10万
查看次数

WPF C#应用程序性能

我们有一个用.Net 4.0编写的C#WPF应用程序,它有一些相对简单的数据绑定和网格功能.

造型包括一些"调整",包括一些悬停颜色等.

在包含20个部署的3台机器上,我们遇到了一些非常奇怪的UI性能问题.

实际上,重新启动后应用程序运行良好,但在一定(未确定)的时间后,UI变得非常缓慢.例如,将鼠标悬停在按钮上,在应用/渲染悬停颜色样式之前,将会延迟几秒钟.

这些机器的规格几乎相同.图形驱动程序已更新,标准设置为两个NVidia Quadro 290卡.另外,我们制作了一个"测试"应用程序,其中只包含一些测试UI组件(包括Fluent功能区),后面没有代码.问题仍然存在.

我已经运行Windows性能套件来"深入"运行时WPF,而且非常奇怪的是,如果勾选了"禁用脏区支持"选项,则UI将恢复正常响应.我的理解是,如果有的话,这应该会进一步降低性能!

我在这里尝试其他任何东西.DotTrace性能分析表明,大部分应用程序时间都花在了PresentationFramework.dll上.

[编辑]所有机器都是Windows XP SP3.

[编辑]这可能发生在所有机器上,并且通常不允许应用程序运行足够长的时间来呈现问题.我们现在正在测试这个.

[编辑]我还应该指出,我们正在尝试这里详述的修补程序.它暂时安装在一台机器上,我会相应更新.

[编辑 - 24小时后]所以两台机器现在一夜之间运行相同的代码.在我的机器上(从未表现出问题),在初始登录后,应用程序非常缓慢,但不到一分钟后恢复正常.(我把它放到机器上清楚地从硬盘上取下东西).在另一台机器上(通常表明问题),应用程序在几秒钟后得到改善,但与我的相比现在仍然缓慢.

[编辑 - 48小时后]在测试机器上,测试应用程序现在在运行48小时后完全没有响应(锁定).在同一台机器上,一个轻量级的"shell"WPF应用程序(包含一个选项卡控件,一些按钮和一些面板和网格)仍在运行并且响应速度非常快.因此,在这些更复杂的控件中出现的问题导致了这个问题......这确实指向可能是根本原因的(可能)触发器和委托.我将再次介绍应用程序/控件.与此同时,是否有人建议如何确保应用程序定期"清理"?因为我们在这里看第三方控件,所以我编辑它们的选项有限!

非常感谢可以提供的任何提示!

c# wpf performance

18
推荐指数
1
解决办法
2136
查看次数

使用Python中的openpyxl将行插入Excel电子表格

我正在寻找使用openpyxl将行插入电子表格的最佳方法.

实际上,我有一个电子表格(Excel 2007),它有一个标题行,后面是(最多)几千行数据.我想将行插入第一行实际数据,所以在标题之后.我的理解是append函数适合于将内容添加到文件的末尾.

阅读openpyxl和xlrd(以及xlwt)的文档,除了手动循环内容并插入新工作表(插入所需的行之后)之外,我找不到任何明确的方法.

鉴于我迄今为止使用Python的经验有限,我试图理解这是否确实是最好的选择(最pythonic!),如果是这样,有人可以提供一个明确的例子.具体来说,我可以使用openpyxl读取和写入行,还是必须访问单元格?另外我可以(过)写同一个文件(名字)吗?

python excel xlrd xlwt openpyxl

13
推荐指数
5
解决办法
5万
查看次数

标签 统计

c# ×2

wpf ×2

binding ×1

excel ×1

openpyxl ×1

performance ×1

python ×1

xlrd ×1

xlwt ×1