【问题标题】:Using custom class as ItemsControl Tag in WPF XAML?在 WPF XAML 中使用自定义类作为 ItemsControl 标记?
【发布时间】:2020-04-03 02:30:50
【问题描述】:

我有一个使用 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。

我该怎么做?

【问题讨论】:

    标签: c# reactjs wpf xaml


    【解决方案1】:

    您可以通过 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      相关资源
      最近更新 更多