J S*_*art 8 data-binding wpf binding user-controls itemscontrol
主题行说明了一切!我有一个用户控件,可以成功绑定到一个Fullname对象 - 即它工作正常.
我现在需要显示这些列表,并且,当控件位于ItemsControl.Template中的DataTemplate中时,这也可以正常工作.
但是,控件有一个属性(InEditMode),它不是Fullname对象的属性,而是具有ItemsControl绑定的FullnameList属性的对象,通过ItemsSource.当控件不在列表中并且绑定到名为ParentInEditMode和ParentFullname的父兄弟属性时,此InEditMode属性可正常工作.
问题是 - 当控件是ItemsControl时,"获取"父对象的编辑模式属性需要什么样的绑定表达式?
或者,我应该重新设计Fullname对象以包含EditMode属性吗?
提前谢谢了!
该项(即绑定到ItemsControl的集合中的项)没有这样的属性.代码很简单:
<ItemsControl ItemsSource="{Binding Path=FullnameList}">
...then...
<ItemsControl.ItemTemplate>
<DataTemplate>
<jasControls:NameView
NameValue="{Binding Path=.}"
InEditMode= ??????? />
Run Code Online (Sandbox Code Playgroud)
整体父级(窗口的视图模型)具有以下属性:
Fullname(用于测试NameView的单项,与任何列表控件之外的xaml完美配合使用:
<jasControls:NameView NameValue="{Binding Path=Fullname}" InEditMode="{Binding Path=ParentInEditMode}"/>
Run Code Online (Sandbox Code Playgroud)我想将编辑模式应用于整个集合 - 使该标志成为Fullname的一部分似乎不对!?
J S*_*art 15
我找到了自己问题的答案,我希望能帮助别人.我的工作语法是这样的:
<StackPanel>
<ItemsControl ItemsSource="{Binding Path=FullnameList}">
...then...
<ItemsControl.ItemTemplate>
<DataTemplate>
<jasControls:NameView
NameValue="{Binding Path=.}"
InEditMode= "{Binding DataContext.ParentInEditMode,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}}" />
Run Code Online (Sandbox Code Playgroud)
这会正确地获取属于FullnameList的兄弟属性并将其传递给数据模板项.更多的是运气而不是判断,但我希望这是一个有效的方法来做到这一点!
对于 ItemsSource 中的每个项目,ItemsControl 创建指定的 DataTemplate 并向其 DataContext 分配相应的项目。现在,每个 DataTemplate 都可以绑定到其数据上下文中的项目。
所以我想你的项目确实有一个属性“ParentInEditMode”;绑定到该属性应该没有问题。
如果它不起作用,请使用一些代码更新您的问题。
| 归档时间: |
|
| 查看次数: |
9441 次 |
| 最近记录: |