silverlight – 从ItemsControl.ItemTemplate中绑定到View Model属性

silverlight – 从ItemsControl.ItemTemplate中绑定到View Model属性,第1张

概述我在ViewModel中有一组对象和一个命令. 我想为集合中的每个对象显示一个超链接,并将每个超链接的Command设置为相同的命令,并将objectID作为CommandParemeter传递.例如 // View Modelpublic class MyViewModel : ViewModelBase{ // Raises PropertyChanged event, ommited 我在viewmodel中有一组对象和一个命令.

我想为集合中的每个对象显示一个超链接,并将每个超链接的Command设置为相同的命令,并将objectID作为CommandParemeter传递.例如

// VIEw Modelpublic class Myviewmodel : viewmodelBase{  // Raises PropertyChanged event,ommited here  public List<MyClass> MyList {....}  public RelayCommand<int> MyCommand {....}}

我将UserControl的DataContext设置为上面的viewmodel类.此UserControl的XAML如下:

<UserControl>  <ItemsControl ItemsSource="{Binding Path=MyList}">    <ItemsControl.ItemsPanel>      <ItemsPanelTemplate>        <StackPanel />      </ItemsPanelTemplate>    </ItemsControl.ItemsPanel>    <ItemsControl.ItemTemplate>      <DataTemplate>        <Hyperlinkbutton Content="{Binding Path=Description}" Command="{Binding Path=MyCommand}" CommandParameter="{Binding Path=MyClassID}"/>      </DataTemplate>    </ItemsControl.ItemTemplate>  </ItemsControl></UserControl>

超链接内容的描述正确显示,但命令永远不会触发,我想这是因为它在MyClass对象中寻找一个命令?

我如何绑定到UserControls DataContext.MyCommand而不是它正在寻找的MyClass.MyCommand?

解决方法 不幸的是,我们在WPF的relativeSource标记扩展上没有FindAncestor模式,所以你不能使用它(这将在Silverlight 5中添加).这很讨厌,但您可以为UserControl元素指定名称,并使用Elementname绑定绑定到分配给其DataContext的对象上的命令.

例如:

<UserControl name="root">

然后绑定命令(使用UserControl的DataContext中的点表示法):

Command="{Binding Path=DataContext.MyCommand,Elementname=root}"

试一试.

总结

以上是内存溢出为你收集整理的silverlight – 从ItemsControl.ItemTemplate中绑定到View Model属性全部内容,希望文章能够帮你解决silverlight – 从ItemsControl.ItemTemplate中绑定到View Model属性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1005452.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存