Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UserControl上的DataGrid不';t显示绑定的可观察集合_C#_Wpf_Mvvm_Datagrid_User Controls - Fatal编程技术网

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>