绑定到ItemsControl中的项

本文关键字:ItemsControl 绑定 | 更新日期: 2023-09-27 17:52:39

我有绑定问题。我在WPF中的XAML结构是这样的:

<ItemsControl ItemsSource="{Binding cacheList}" >
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock  Text="{Binding type}"/>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseDown">
            <i:InvokeCommandAction Command="{Binding loadFromCache}" CommandParameter="-- BIND TO CLICKED ITEM --"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ItemsControl>

直到现在一切都很好。当我点击ItemsControl中的项目时,我在ModelView类中注意到这一点。但我不知道哪个项目被点击了。

我尝试绑定到"this"对象:

<i:InvokeCommandAction Command="{Binding loadCache}" CommandParameter="{Binding}"/>

但在这种情况下,我得到奇怪的结果,因为我收到(检查输出):App.ViewModels。MainViewModel,它是所有视图的上下文,而不是这个特定项。

怎么做,这样我就可以解析哪个项目被点击了?

编辑:我找到了一个解决方案:使用ListBox(或任何从Selector控件派生的东西)来使用SelectedItem属性。

绑定到ItemsControl中的项

现在我知道您想使用绑定来实现这一点,您可以采用这种方法。

首先,将文本框设置为可点击区域,并创建一个输入绑定来处理鼠标点击:

<TextBlock Tag="{Binding}" Text="{Binding Name}">
    <TextBlock.InputBindings>
         <MouseBinding MouseAction="LeftClick" Command="{Binding ItemClick}" CommandParameter="{Binding}"/>
    </TextBlock.InputBindings>
</TextBlock>

你可以看到MouseBinding处理鼠标的左键点击,并且指定的命令绑定到在items控件的item对象类型中定义的ICommand:

 public class YourObject
 {
     public ICommand ItemClick { get { return new ItemClickCommand(); } }
     public string Name { get; set; }
 }

然后命令实例"ItemClickCommand"将在LeftClick发生时触发-并且您将拥有该项目作为命令参数:

public class ItemClickCommand : ICommand
{
    public event EventHandler CanExecuteChanged;
    public bool CanExecute(object parameter)
    {
        return true;
    }
    public void Execute(object parameter)
    {
        // parameter will be the item clicked
    }
}