Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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# WPF:Can';我无法访问视图。Datagrid未刷新选项卡中的数据_C#_Wpf_Datagrid - Fatal编程技术网

C# WPF:Can';我无法访问视图。Datagrid未刷新选项卡中的数据

C# WPF:Can';我无法访问视图。Datagrid未刷新选项卡中的数据,c#,wpf,datagrid,C#,Wpf,Datagrid,我遵循这一点,但我希望每个选项卡都显示一个数据网格。datagrid不显示,也不显示数据。当我进入代码时,我确实看到设置了0,1 MainWindow.xaml <Window x:Class="MVVMDataInstances.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com

我遵循这一点,但我希望每个选项卡都显示一个数据网格。datagrid不显示,也不显示数据。当我进入代码时,我确实看到设置了0,1

MainWindow.xaml

<Window x:Class="MVVMDataInstances.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:viewModel="clr-namespace:MVVMDataInstances"
        Title="MainWindow" Height="350" Width="525">

    <Window.DataContext>
        <viewModel:MainWindowViewModel />
    </Window.DataContext>
    <Grid>
        <Grid.Resources>
            <DataTemplate x:Key="ContentTemplate" 
                      DataType="{x:Type viewModel:ChildViewModel}"/>
        </Grid.Resources>
        <TabControl ContentTemplate="{StaticResource ContentTemplate}"  
                ItemsSource="{Binding Items}" />
    </Grid>
</Window>
<Grid>
        <TabControl ItemsSource="{Binding Items}">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding TabTitle}"/>
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <DataGrid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AutoGenerateColumns="True"
                  ItemsSource="{Binding Grid}"/>
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>
    </Grid>
ViewModelBase.cs

 public class ViewModelBase : INotifyPropertyChanged
    {

        public void OnPropertyChanged(string name)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
我希望每个选项卡都有一个网格。第一个选项卡上的条目对于属性a的值为0。第二个选项卡上的条目对于属性B的值为1

我看到当OnPropertyChanged被称为PropertyChanged时,它是null

如果MainWindow.xaml中有数据网格,我可以访问该数据网格

<Window x:Class="MVVMDataInstances.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:viewModel="clr-namespace:MVVMDataInstances"
        Title="MainWindow" Height="350" Width="525">

    <Window.DataContext>
        <viewModel:MainWindowViewModel />
    </Window.DataContext>
    <Grid>
        <Grid.Resources>
            <DataTemplate x:Key="ContentTemplate" 
                      DataType="{x:Type viewModel:ChildViewModel}"/>
        </Grid.Resources>
        <TabControl ContentTemplate="{StaticResource ContentTemplate}"  
                ItemsSource="{Binding Items}" />
    </Grid>
</Window>
<Grid>
        <TabControl ItemsSource="{Binding Items}">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding TabTitle}"/>
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <DataGrid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AutoGenerateColumns="True"
                  ItemsSource="{Binding Grid}"/>
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>
    </Grid>

但是OnPropertyChanged对此始终为空,我看不到网格

<DataTemplate x:Key="ContentTemplate" 
                  DataType="{x:Type viewModel:ChildViewModel}">
     <viewModel:ChildView /> 
</DataTemplate>

您的
数据模板
为空。从你的问题来看,你可能想做以下几点:

<Grid>
    <Grid.Resources>
        <DataTemplate x:Key="ContentTemplate" TargetType="{x:Type viewModel:ChildViewModel}">
            <DataGrid AutoGenerateColumns="False" . . .>
                <DataGrid.Columns>
                    <!-- Your column definitions here -->
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
    </Grid.Resources>
    <TabControl ContentTemplate="{StaticResource ContentTemplate}"  
            ItemsSource="{Binding Items}" />
</Grid>

此数据模板告诉ChildViewModel.cs它的外观是View.xaml:

 <DataTemplate x:Key="ContentTemplate" 
                  DataType="{x:Type viewModel:ChildViewModel}">
     <viewModel:View /> 
</DataTemplate>


因此,在幕后,它还将每个视图的DataContext设置为ChildViewModel的一个实例。

我遵循这一点进行ViewModel继承。PropertyChanged的原因为null,因为构造函数已初始化两次。第一次使用整数,第二次使用InitializedComponent。如果我注释掉InitializedComponent,则网格从未初始化。另一个stackoverflow问题的答案通过视图模型继承使一切变得更干净。

这将设置标题,但不会为MainWindowViewModel中指定的数据设置值0,1。csI正在尝试使用MainWindowViewModel中的示例。cs创建了两个选项卡,但没有显示网格。我不知道如何使用ContentPresenter。我会查的。您提供的最后一个代码片段不起作用。我现在看到了datagrid的大纲,但是当我逐步完成代码时,属性更改总是空的。
<Grid>
    <Grid.Resources>
        <DataTemplate x:Key="ContentTemplate" TargetType="{x:Type viewModel:ChildViewModel}">
            <DataGrid AutoGenerateColumns="False" . . .>
                <DataGrid.Columns>
                    <!-- Your column definitions here -->
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
    </Grid.Resources>
    <TabControl ContentTemplate="{StaticResource ContentTemplate}"  
            ItemsSource="{Binding Items}" />
</Grid>
 <DataTemplate x:Key="ContentTemplate" 
                  DataType="{x:Type viewModel:ChildViewModel}">
     <viewModel:View /> 
</DataTemplate>