在 WPF 中使用 RelativeSource FindAncestor 时出错

Error Using RelativeSource FindAncestor in WPF

我确实有一个 Window(DataContext VM)和一个 Listview(VM 中的 ItemSource 可观察列表) 数据来自一个sqlite DB,Observable List是Type of Model,代表Residents。 每个 Resident 都应该有一个“CheckIn”或“CheckOut”按钮,对于他们来说,我的 VM 中确实有 ICommands。

<ListView ItemsSource="{Binding Oc_BewohnerList}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <WrapPanel>
                                    <TextBlock Text="Name:" Width="50"/>
                                    <TextBlock Text="{Binding Nachname, StringFormat={}{0}\, }" FontWeight="Bold"/>
                                    <Button Content="Check In" Command="{Binding Source={RelativeSource AncestorType={x:Type viewModels:BewohnerVM}}, Path=CheckInCommand}" CommandParameter="{Binding Id}" />

为什么我收到错误消息“Die Eigenschaft "CheckInCommand" wurde im Objekt vom Typ "RelativeSource" nicht gefunden。”未找到 CheckInCommand?

我先用 Xamarin.Forms 做了它,然后它以类似的方式工作......我自己找不到解决方案,尝试了 realtivesource 和 ancestorlevel 的大量组合......

提前致谢 那拉

可能只是一个小的语法错误而你想要(注意 RelativeSource 的双重用法,一次作为 属性 绑定一次作为 MarkupExtension...)

编辑以及 AncestorType 应该是 UIElement,其 DataContext 公开该 CheckInCommand。

<Button Content="Check In" 
     Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListView}}, Path=DataContext.(viewModels:BewohnerVM.CheckInCommand)}"
     CommandParameter="{Binding Id}" />

相对源绑定在可视化树上。 就像在控件中而不是视图模型中一样。 您不会寻找视图模型。 如果命令是 VM 上的 属性 并且这是 window 的数据上下文,则 ListView 会继承该数据上下文。

您没有解释所有内容,但我认为您需要更多信息:

<Button Content="Check In" 
Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListView}}, 
Path=DataContext.CheckInCommand}" 
CommandParameter="{Binding Id}" />