XAML Avalonia UI,将列表框中的按钮命令绑定到ViewModel而不是ItemsSource

92vpleto  于 2023-10-14  发布在  其他
关注(0)|答案(1)|浏览(171)

我现在正在摆弄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'.

任何帮助将不胜感激!

enyaitl3

enyaitl31#

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

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

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

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

另外,如果按钮不在另一个数据模板中,则可以直接绑定到属性IsVisible="{Binding IsSelected}"

相关问题