C# UserControl上的DataGrid不';t显示绑定的可观察集合
我有一个带有一些按钮的主窗口,用于加载收藏:C# UserControl上的DataGrid不';t显示绑定的可观察集合,c#,wpf,mvvm,datagrid,user-controls,C#,Wpf,Mvvm,Datagrid,User Controls,我有一个带有一些按钮的主窗口,用于加载收藏: <Window x:Class="GUI.MainWindow.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.c
<Window x:Class="GUI.MainWindow.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mainWindowViewModel="clr-namespace:GUI.MainWindow"
xmlns:s="clr-namespace:Helpers"
xmlns:configuration="clr-namespace:GUI.Configuration"
xmlns:results="clr-namespace:GUI.Results"
mc:Ignorable="d"
Title="{Binding Path=Model.Title}"
Width="Auto"
WindowStartupLocation="CenterScreen">
<Window.Resources>
<DataTemplate DataType="{x:Type results:ResultViewModel}">
<results:ResultView/>
</DataTemplate>
</Window.Resources>
<!--DataContext-->
<Window.DataContext>
<mainWindowViewModel:MainWindowViewModel />
</Window.DataContext>
<!--DataContext-->
<!--Main Grid-->
<Grid Name="MainGrid"
Margin="5"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="8*" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!--Tabs-->
<TabControl Grid.Row="1"
Grid.RowSpan="2"
Grid.Column="0"
VerticalAlignment="Stretch">
<!--Result View-->
<TabItem Header="{Binding Model.TabImportHeader}">
<ContentControl Content="{Binding ResultViewModel}"/>
</TabItem>
</TabControl>
<!--Tabs-->
<!--Buttons-->
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Row="0"
Grid.Column="0"
Margin="10"
Height="25"
Width="150"
Content="Load"
Command="{Binding LoadCommand}" />
<Button Grid.Row="0"
Grid.Column="2"
Margin="10"
Height="25"
Width="150"
Content="Reload"
Command="{Binding ReloadCommand}" />
</Grid>
<!--Buttons-->
</Grid>
<!--Main Grid-->
</Window>
集合
是可观察集合的类型
似乎我在绑定中遗漏了一些东西,但我对WPF和MVVM还很陌生,我没有找到它。
我已经读过DependencyProperty,但我想为我的userControl创建一个ViewModel,因为它最终会变得更复杂
我非常感谢您的帮助。您有两个
ResultViewModel
实例,一个在MainWindowViewModel.ResultViewModel
属性中,另一个直接分配给UserControl的DataContext:
<UserControl.DataContext>
<local:ResultViewModel />
</UserControl.DataContext>
从UserControl的XAML中删除上述内容
一般来说,UserControl永远不应该有自己的视图模型,也不应该在其XAML或代码隐藏中显式设置其DataContext属性。这样做将覆盖继承的DataContext的值,该值包含正确的ResultViewModel实例。是否正在实现INotifyPropertyChanged?你在哪里收集?(我的意思是它是一个方法还是在初始化时?)是的,ResultModel实现INotifyPropertyChanged,我在集合上引发事件,另外,集合的类型是ObservableCollection。集合中填充了一个从MainWindowHi,okey上的命令引发的方法,如果我删除UserControl的DataContext的赋值,该方法将起作用。如果我执行以下操作,也可以正常工作:
而不是
谢谢您的回答!
Application.Current.Dispatcher.Invoke(() => MainWindowViewModel.ResultViewModel.Model.Collections.Add(Collection));
<UserControl.DataContext>
<local:ResultViewModel />
</UserControl.DataContext>