我是WPF和MVVM模式的新手,所以我的绑定有些问题。
在客户的详细信息视图中,我想在组合框中列出一些状态。
在我的ViewModel中,客户处于根级别,状态列表也是如此。
使用静态资源时,我可以使用:
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}, Path=DataContext.PartGruppAll}"
在我的ComboBox上,但是当我从代码中设置DataContext时,它不起作用,我做错了什么,在我看来它应该没有区别。
祝你好运, 彼得拉尔森
答案 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
名称和其他属性
名称和其他属性
我认为没有什么真正复杂的......网格与选定的客户联系在一起,这就是问题所在。