Wpf MVVM中没有静态资源的RelativeSource FindAncestor?

Wpf MVVM中没有静态资源的RelativeSource FindAncestor?,wpf,mvvm,combobox,binding,Wpf,Mvvm,Combobox,Binding,我是WPF和MVVM模式的新手,所以我的绑定有一些问题 在客户的详细信息视图中,我想在组合框中列出一些状态 在我的ViewModel中,客户处于根级别,状态列表也处于根级别 使用静态资源时,我可以使用: ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}, Path=DataContext.PartGruppAll}" 在我的组合框上,但是当我从

我是WPF和MVVM模式的新手,所以我的绑定有一些问题

在客户的详细信息视图中,我想在组合框中列出一些状态

在我的ViewModel中,客户处于根级别,状态列表也处于根级别

使用静态资源时,我可以使用:

ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}, Path=DataContext.PartGruppAll}"
在我的组合框上,但是当我从代码隐藏中设置DataContext时,它不起作用,我做错了什么,在我看来这应该没有什么区别

致以最良好的祝愿,
彼得·拉森

这并不是因为你可能有拼写错误

Path=DataContext.PartGruppAll
可能应该是

Path=DataContext.PartGroupAll
哦,还有一件事

如果StackPanel与组合框位于同一个可视树上,则不需要在绑定中找到它

ItemsSource="{Binding PartGruppAll}" 

应该可以在可视化树上搜索DataCoxtext。

我将尝试向您提供更多详细信息,viewmodel非常大,因此我将尝试缩短它

我在App.xaml的代码隐藏中实例化了viewmodel

        protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        PartWindow pw = new PartWindow();


        var PartViewModel = new ViewModel.PartWindowViewModel();
        pw.DataContext = PartViewModel;

        pw.Show();
    }
然后在我的页面中,我将数据绑定到stackpanel:

<StackPanel DataContext="{Binding Path=PartViewModel}">

然后,通过绑定到Customer属性SelectedPart,在网格中显示客户

   <Grid DataContext="{Binding SelectedPart}" Margin="5" Grid.Column="0">

我的viewModel如下所示:

ViewModelClass

  • 选定部分
名称和其他属性

  • 状态列表
名称和其他属性


没什么复杂的,我想。。。网格与选定的客户绑定,这就是问题所在

在绑定中,尝试将AncestorType设置为视图类。差不多

ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type vw:MyView}}, Path=DataContext.PartGruppAll}"
其中,vw是保存视图的命名空间,MyView是视图类本身的名称

在我的申请表中,我这样声明了大众汽车

xmlns:vw="clr-namespace:MyApp.View"

(您可能不需要这一点,但我包括了just-in-case=)

也许还可以给我们提供viewmodel代码。这可能会有帮助不,对不起,这个名字中有瑞典语的一部分,正确的名字实际上是PartGruppAll.:)好的,不用担心。。。这只是一种预感