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

时间:2010-07-23 07:41:15

标签: wpf mvvm combobox binding

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

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

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

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

ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}, Path=DataContext.PartGruppAll}"

在我的ComboBox上,但是当我从代码中设置DataContext时,它不起作用,我做错了什么,在我看来它应该没有区别。

祝你好运, 彼得拉尔森

4 个答案:

答案 0 :(得分:2)

在绑定中,尝试将AncestorType设置为您的视图类。像

这样的东西
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type vw:MyView}}, Path=DataContext.PartGruppAll}"

其中vw是您的名称空间,您可以在其中查看,MyView是您的视图类本身的名称。

在我的申请中,我已经声明了这样的

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

(你可能不需要那个位,但我包括以防万一=)

答案 1 :(得分:0)

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

Path=DataContext.PartGruppAll

可能应该是

Path=DataContext.PartGroupAll

答案 2 :(得分:0)

哦还有一件事......

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

ItemsSource="{Binding PartGruppAll}" 

在视觉树上搜索DataCoxtext的工作。

答案 3 :(得分:0)

我会尝试给你一些更多细节,视图模型非常大,所以我会尝试缩短它。

我在我的代码中实例化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-property SelectedPart在网格中显示Customer。

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

我的viewModel看起来像这样:

ViewModelClass

  • SelectedPart

名称和其他属性

  • StatusList

名称和其他属性

我认为没有什么真正复杂的......网格与选定的客户联系在一起,这就是问题所在。