Csharp/C#教程:将DataTemplate中的按钮绑定到窗体的ViewModel中分享


将DataTemplate中的按钮绑定到窗体的ViewModel中

我的问题类似于这个问题中描述的问题:
DataTemplate中的WPF MVVM按钮控件绑定

这是我的XAML:

   <!--

它只是一个ListBox ,绑定到名为CommandSetsObservableCollection (位于ViewModel中)。
此绑定有效(它显示集合中每个项目的按钮)。

现在我想将按钮绑定到命令( FireCommand ),该命令也在ViewModel中。
这是ViewModel的相关部分:

 public class MainWindowViewModel : INotifyPropertyChanged { public ICommand FireCommand { get; set; } public ObservableCollection CommandSets { get; set; } public MainWindowViewModel() { this.FireCommand = new RelayCommand(new Action(this.FireMissile)); } private void FireMissile(Object obj) { System.Windows.MessageBox.Show("fire"); } } 

此按钮的绑定不起作用。
根据我从上面链接的问题中理解,绑定不起作用,因为:
(如我错了请纠正我)

命令本身肯定是正确的,因为当我将按钮放在 ListBox 之外时 (参见上面的XAML示例),绑定工作并执行命令。

显然,我“只是”需要告诉按钮绑定到窗体的主ViewModel。
但我无法弄清楚正确的XAML语法。

我尝试了几种谷歌搜索后找到的方法,但没有一种方法适合我:

 

有人可以请:

  1. 给我正确的XAML将ListBox的按钮绑定到表单的MainViewModel的命令?
  2. 请给我一个链接,其中这个高级绑定的东西以WPF / MVVM初学者可以理解的方式解释?
    我觉得我只是在复制和粘贴神秘的XAML咒语,到目前为止我没有任何线索(并且找不到任何好的文档)我怎么会自己弄明白我需要哪些情况RelativeSourceStaticResource或其他任何而不是“正常”绑定。

它的:

 {Binding DataContext.FireCommand, RelativeSource={RelativeSource AncestorType=ListBox}} 

除非你实际上一直在改变DataContext ,否则不需要走向root,但由于ListBox似乎绑定到主VM上的属性,这应该足够了。

我建议阅读的唯一内容是数据绑定概述和Binding类文档(包括其属性)。


此处还有关于如何构造绑定的简短说明:绑定由和相对于该Path组成,默认情况下, source是当前的DataContext 。 可以显式设置的Source是: SourceElementNameRelativeSource 。 设置其中任何一个都将覆盖DataContext作为

因此,如果您使用像RelativeSource这样的并希望在该级别上访问DataContext某些内容,则DataContext需要出现在Path

上述就是C#学习教程:将DataTemplate中的按钮绑定到窗体的ViewModel中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1000556.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐