我们有一个带有标准MVVM模式的WPF应用程序,利用Cinch(以及MefedMVVM)进行View - > ViewModel解析.这很好用,我可以将相关控件绑定到ViewModel上的属性.
在特定的视图中,我们有一个Infragistics XamGrid.此网格绑定到ViewModel上的ObservableCollection,并显示相应的行.但是,我在这个网格上有一个特定的列,我试图将TextBox文本值绑定到父DataContext上的属性,而不是ObservableCollection.这种绑定失败了.
我们在这里经历了几个选项,包括:
使用AncestorType跟踪树并绑定到父UserControl的DataContext,如此(从这个问题的答案很好,以及这个)...
{Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
Run Code Online (Sandbox Code Playgroud)指定ElementName并尝试直接定位顶级控件.有一个看看这里,如果你想了解使用的ElementName.
使用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 ...你只需要添加你想要的列,然后关闭相关的标签.
Dte*_*tex 83
我不知道XamGrid但这就是我用标准的wpf做的事情DataGrid:
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding DataContext.MyProperty, RelativeSource={RelativeSource AncestorType=MyUserControl}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding DataContext.MyProperty, RelativeSource={RelativeSource AncestorType=MyUserControl}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
由于单元格模板中指定的TextBlock和TextBox将在视觉树中的一部分,您可以向上走,找到您需要的任何控件.
| 归档时间: |
|
| 查看次数: |
97894 次 |
| 最近记录: |