1. 如何在诸如ListBox这样的项中绑定父类数据上下文。

<ListBox Grid.Row="" ItemsSource="{Binding Entries}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" Grid.Row="" />
<materialDesign:Card.ContextMenu>
<MenuItem Header="Action" Command="{Binding Source={StaticResource Locator},Path=Entries.BeginPing}" CommandParameter="{Binding }"/>
</ContextMenu>
</materialDesign:Card.ContextMenu>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

在上述代码中,ListBox的ItemSource为某个集合,在其模板中绑定了集合实体成员的Name属性。假设存在这样一个需求,需要在个ListBoxItem上做统一的一项操作,比如检查、删除等,则需要为ListBoix的某个控件(比如按钮、右键菜单等)绑定一个父类的命令实例。蓝色的Xaml代码实现了这一点,因为它在ListBox.ItemSource的数据上下文之下,需要显示指明其绑定的DataContext。

<MenuItem Header="Action" Command="{Binding Source={StaticResource Locator},Path=Entries.BeginPing}" CommandParameter="{Binding }"/>

在本项目中,使用了GalaSoft的Mvvm方案,Locator为App的资源,其通过DI注入了大量的ViewModel实例。Entries为此XamlDataCotext的ViewModel实例名,其存储在Locator中。

在网络上,还有一些其他的使用RelativeSource的方法,但我没有实现成功。比如讲AscentType指定为父类Windows,依然没有找到Windows的DataContext。比如在Binding to alternate DataContexts[1]中,其实现为:

<Button Content="Remove" CommandParameter="{Binding}"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}, Path=DataContext.RemoveItemCommand}"/>
</DockPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

我按照其实现方式,并没有实现成功。可能是因为使用了第三方的XAML设计方案,中间夹杂着大量的特殊标签。

2. 诸如ListBox的子项绑定了集合中的一项,如何进行格式化。

ListBox Grid.Column="" ItemsSource="{Binding ResultQueue}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=.,Converter={StaticResource pintConvert}}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

在上述Xaml中,ListBox绑定了ResultQueue集合,ListBoxItem显示集合中的每个成员。默认情况下<TextBlock Text="{Binding }}"></TextBlock>就可以绑定。如果要对其实现格式转换,则需要为其提供一个默认的占位符。

参考:

[1]Binding to alternate DataContexts, http://blogs.interknowlogy.com/2011/04/26/binding-to-alternate-datacontexts/

WPF中的两个绑定场景的更多相关文章

  1. 总结:WPF中MultiBinding多值绑定的方法

    原文:总结:WPF中MultiBinding多值绑定的方法 一.Xaml中绑定代码: <TextBlock  Grid.Row="5" Grid.Column="3 ...

  2. WPF中Image控件绑定到自定义类属性

    首先我们定义一个Student类,有ID,Name,Photo(保存图片路径). using System; using System.Collections.Generic; using Syste ...

  3. 在WPF中合并两个ObservableCollection

    WPF中的ObservableCollection是一个非常常用的集合对象,我们可以通过将它绑定到ListBox之类的集合控件上时,当集合发生变更时,会同步更新到界面上.但是,有的时候我们需要合并两个 ...

  4. 在WPF中如何使用RelativeSource绑定

    在WPF绑定的时候,指定绑定源时,有一种办法是使用RelativeSource. 这种办法的意思是指当前元素和绑定源的位置关系. 第一种关系: Self 举一个最简单的例子:在一个StackPanel ...

  5. WPF中的Command事件绑定

    在项目中使用Command绑定能够使我们的代码更加的符合MVVM模式.不了解的同学可能不清楚,只有继承自ButtonBase类的元素才可以直接绑定Command(Button.CheckBox.Rad ...

  6. WPF中一个控件绑定另一个控件的属性

    如同一个Grid中的一个按钮根据另一个按钮的显示与否作出不同的响应: 绑定的时候通过ElementName来指定控件 <Grid Margin="50,130"> &l ...

  7. WPF中多个RadioButton绑定到一个属性

    如图样: 在View中: <RadioButton IsChecked="{Binding Option, Converter={cvt:EnumToBooleanConverter} ...

  8. WPF中实现两个窗口之间传值

    在使用WPF的时候,我们经常会用到窗体之间传值,下面示例主窗口传值到子窗口,子窗口传值到主窗口的方法. 一.主窗口向子窗口传值 主窗口向子窗口传值主要方法就是在子窗口建立一个接收主窗口值的变量,然后实 ...

  9. WPF中ComboBox控件绑定键值对操作

    WPF中下拉框将键值对作为其数据源的具体操作.本实例以枚举类型以及枚举特性描述字符串生成键值对来进行. namespace ViewC { /// <summary> /// View.x ...

随机推荐

  1. [bzoj 1042][HAOI2008]硬币购物(用容斥原理弄背包)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1042 分析: 解法很巧妙,用f[i]表示四种硬币A.B.C.D的数量不考虑的情况下弄成 ...

  2. java编程思想——java IO系统

    一.什么是IO io在本质上是单个字节的移动.而流能够说是字节移动的载体和方式,它不停的向目标处移动数据.我们要做的就是依据流的方向从流中读取数据或者向流中写入数据. 二.java中支持IO操作的库类 ...

  3. Socket 长连接 短连接 心跳 JAVA SOCKET编程

    简单解释就是: 短连接:建立连接,发送数据包.关闭连接 长连接:建立连接.发送数据包,发送心跳包,发送数据包,发送心跳包.发送心跳包. ..... 所以又频繁的数据收发的话.短连接会频繁创建TCP连接 ...

  4. js字符转处理

    那几个函数的应用: <script> //全局变量删不掉,而全局属性能删掉 var a=123; function aa () { b=321; delete b; } aa(); del ...

  5. Longest Increasing Subsequence HDU - 6284

    /* 首先预处理好f g数组 fi :以a[i]为结尾的 最长上升子序列的长度 gi :以a[i]为开始的 最长上升子序列的长度 mxx : 最长上升子序列的长度 线段树优化 nlogn (不包含a[ ...

  6. cocos2d-x 3.0 常见问题及解决

    我自己遇到的问题记录,会及时更新.希望对大家有帮助 1.打包图片生成plist后,假设在游戏中图片挨在一起可能会出现黑线,打包时将Extrude设为1就可以 2.Xcode环境下.更新资源后执行的时候 ...

  7. VS2010中使用AnkhSvn

    VS2010中使用AnkhSvn   今天想到要在自己的开发环境IDE(Visual Studio 2010)中安装一个代码管理器的插件,本人在使用VS2005的时候一直都是使用AnkhSvn-2.1 ...

  8. 【Codeforces】Round #375 (Div. 2)

    Position:http://codeforces.com/contest/723 我的情况 啊哈哈,这次raiting肯定要涨,接受过上次的教训,先用小号送肉,大号都是一发切,重回蓝咯 结果... ...

  9. openstack instance bootmgr is missing 问题 修复

  10. Input 内提示填写内容

    输入框内提示默认内容,用户的点击后提示内容消失,如果填写内容为空,失去焦点后自动显示提示内容 <input type="text" value="搜索" ...