[英]Using custom class as ItemsControl Tag in WPF XAML?
我有一个用 ASP.NET 和 React 构建的 Web 应用程序。 我正在尝试将一些组件移植到 Windows WPF 应用程序,这是我第一次使用 WPF/XAML。 我对 XAML 的体验还不错......它就像一个更详细的 React,但我无法弄清楚如何正确做的一件事是将绑定参数从嵌套列表保存到 ItemsControl。
在 React 中,我会使用类似onClick="(e)=>this.myFunction(e, parentIndex)" 的东西,这样我就可以一次发送 2 个参数,可能代表一个索引和一个值,或者一个 childIndex 和 parentIndex , 等等。
我不清楚如何使用 WPF 的 XAML 风格和一般的 XAML 正确执行此操作。 从我读过的内容来看,我必须使用 ICommand(我觉得这有点矫枉过正,因为我使用的参数通常不是用户输入,而是对后端其他对象的引用)或设置将初始对象(按钮)的标记添加到具有我需要的属性数量的自定义类。
第二种方法对我来说似乎更明智,但我无法弄清楚如何使用 XAML 前端的 ItemsControl 动态执行此操作 - 我在代码隐藏中看到的所有教程都是这样做的,我认为这是不可能的因为我正在使用 ItemsControl。
我怎样才能做到这一点?
您可以通过 CommandParameter 将项目传递给命令。 对于向 mouseEvents 分配命令,您可以使用 InputBindings。
让我们假设您有带有命令的 ViewModel
public ICommand SomeClickCommand {get; private set}
public void SomeCLickCOmmandHandler (object parameter)
{
var yourItem = object as SomeItemType;
}
您可以将项目分配给 DataTemplate 中的命令
<DataTemplate TargetType={x:Type someItemType}>
<Border>
<Border.InputBindings>
<MouseBinding Command="{Binding Path=DataContext.SomeClickCommand , RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}, Mode=FindAncestor}}"
CommandParameter="{Binding}"
Gesture="LeftDoubleClick" />
</Border.InputBindings>
<TextBlock Text={Binding SomeProperty} />
</Border>
</DataTemplate>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.