Avalonia UI,将 ListBox 中的按钮命令绑定到 ViewModel 而不是 ItemsSource

问题描述 投票:0回答:1

我现在正在摆弄 Avalonia UI,并且在列表框中实现编辑按钮时遇到问题。

该按钮仅在选择该项目时才可见,并且应执行在 ViewModel 中定义的名为 EditCommand 的 ICommand。可见性绑定工作得很好,但命令绑定却不行,我似乎不明白为什么。

<ListBox Name="ListBoxDisplay" ItemsSource="{Binding ObservableCollection}" SelectedItem="{Binding SelectedItem}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid ColumnDefinitions="2*, *, *">

[snipped listbox content that's not relevant]
                    
                <Button Grid.Column="2" IsVisible="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected}"
                    Command="{Binding ElementName=ListBoxDisplay, Path=DataContext.EditCommand}">
                        Edit
                </Button>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

已经尝试使用RelativeSource(到ListBox或整个UserControl)将其绑定,并将其直接绑定到EditCommand。

错误总是相同的:

Unable to resolve property or method of name 'EditCommand' on type 'System.Object'. 

如有任何帮助,我们将不胜感激!

xaml data-binding avaloniaui avalonia
1个回答
0
投票

因此,在这些情况下,我用来绑定到祖先的 viewmodel 属性的方式如下:

Command="{Binding $parent[ListBox].DataContext.EditCommand}"

但是上次我尝试 Avalonia 11 时也遇到了类似的问题,我在他们的文档中找到了答案 - 我必须添加显式转换

Command="{Binding $parent[ListBox].((vm:ParentViewModel)DataContext).EditCommand}

另外,如果您的按钮不在另一个数据模板内,您可以直接绑定到属性

IsVisible="{Binding IsSelected}"

© www.soinside.com 2019 - 2024. All rights reserved.