我的数据绑定存在问题,可能是一个小问题。我试图在我的应用程序中实现MVVM模式。因此我有一个模型包含我的数据。此数据以定期方式通过网络更新。在这个模型的顶部,我有一个要绑定的视图模型。在这个视图模型中,我有一个ObservableCollection,我想绑定它。我遇到的问题是,我的视图模型需要是一个全局资源。这就是我在NavigationWindow中使用以下尝试的原因:
<NavigationWindow.DataContext>
<localvm:DataViewModel/>
</NavigationWindow.DataContext>
我必须将其用作全局变量的原因是,此视图模型启动了我的网络业务逻辑。这可能是一个糟糕的方式,但我无法找到解决方案。无论如何 为了显示我的数据,我的NavigationWindow中有一个Frame定义如下:
<Frame Source="/Views/Pages/Page1_SystemOverview.xaml" VerticalAlignment="Stretch></Frame>
在这个加载的页面中,我有一个ItemsControl来查看Collection:
<Page>
<Grid>
<Grid.Resources>
<localcnv:DebugHelperConverter x:Key="debugCNV"/>
</Grid.Resources>
<StackPanel>
<ItemsControl ItemsSource="{Binding Source=ListOfQuerys}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Button Content="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=(ItemsControl.AlternationIndex)}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
所以这是我的问题:当我启动我的程序时ItemsControl包含18个元素,根本没有内容。它应该只包含两个元素,输出窗口显示没有绑定错误,但是当我将ItemsSource更改为
时"{Binding Path=ListOfQuerys}"
它说:
System.Windows.Data Information: 41 : BindingExpression path error: 'ListOfQuerys' property not found for 'object' because data item is null. This could happen because the data provider has not produced any data yet. BindingExpression:Path=ListOfQuerys; DataItem=null; target element is 'ItemsControl' (Name=''); target property is 'ItemsSource' (type 'IEnumerable')
我做错了什么?我想,当我在父类中设置DataContext时,我可以在树上使用它但不知何故它不起作用,任何想法?
谢谢!
答案 0 :(得分:0)
尝试改变
<ItemsControl ItemsSource="{Binding Source=ListOfQuerys}">
通过
<ItemsControl ItemsSource="{Binding Source=ListOfQuerys, Mode=TwoWay}">
答案 1 :(得分:0)
如果ListOfQuerys是您的datacontext对象的属性,请进行以下绑定:
<ItemsControl ItemsSource="{Binding ListOfQuerys}">
默认情况下,source是您的datacontext,这里是ListOfQuerys路径。
答案 2 :(得分:0)
Frame
元素的内容不是可视/逻辑树的一部分,因此不会持久保存数据上下文。您必须明确设置它。
<Frame Source="Page1.xaml" Navigated="Frame_Navigated"/>
private void Frame_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
((FrameworkElement) e.Content).DataContext = this.DataContext;
}
希望这会有所帮助......