Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 将ObservableCollection绑定到子窗口,设计模式有效,实际数据无效_C#_Wpf_Mvvm_Mvvm Light - Fatal编程技术网

C# 将ObservableCollection绑定到子窗口,设计模式有效,实际数据无效

C# 将ObservableCollection绑定到子窗口,设计模式有效,实际数据无效,c#,wpf,mvvm,mvvm-light,C#,Wpf,Mvvm,Mvvm Light,我有以下代码,其中设计模式起作用,但当我使用真正相等的数据运行它时,窗口只显示默认的类名DocumentViewer.ViewModel.ItemSelector ViewModel,没有其他内容(与设计模式不同)。我根本看不出问题所在 视图模型 XAML 您正在用您的视图模型替换窗口。内容(当前设置为网格,名称为MyLayoutRoot) 当WPF去渲染视图模型对象时,它在其.Resources中看不到该对象的任何DataTemplate,因此它使用所有非UI对象的默认模板来渲染它,这是一个T

我有以下代码,其中设计模式起作用,但当我使用真正相等的数据运行它时,窗口只显示默认的类名DocumentViewer.ViewModel.ItemSelector ViewModel,没有其他内容(与设计模式不同)。我根本看不出问题所在

视图模型 XAML 您正在用您的
视图模型替换
窗口。内容
(当前设置为
网格
,名称为
MyLayoutRoot

当WPF去渲染视图模型对象时,它在其
.Resources
中看不到该对象的任何
DataTemplate
,因此它使用所有非UI对象的默认模板来渲染它,这是一个
TextBlock
,其
Text
属性设置为对象的
ToString()
方法

您可能希望在
网格
后面设置数据层,而不是替换它,因此在构造函数中设置
DataContext
属性,而不是
Content
属性

public ItemSelectorView(ItemSelectorViewModel itemSelectorViewModel)
{
    InitializeComponent();

    if (!Designer.IsInDesignMode())
    {
        DataContext = itemSelectorViewModel;
    }
}

Thx Rachel,这就是解决方案!我确信这一定是件小事,但我根本没看到。显示设计时间和实时数据现在就像一种魅力。
public partial class ItemSelectorView
{
    public ItemSelectorView(ItemSelectorViewModel itemSelectorViewModel)
    {
        InitializeComponent();

        if (!Designer.IsInDesignMode())
        {
            Content = itemSelectorViewModel;
        }
    }
}
<Window x:Class="DocumentViewer.View.ItemSelectorView"
    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:viewModel="clr-namespace:DocumentViewer.ViewModel"
    Title="ItemSelector"
    Width="300"
    Height="321"
    WindowStyle="SingleBorderWindow"
    d:DataContext="{d:DesignInstance Type=viewModel:ItemSelectorViewModel,
                                     IsDesignTimeCreatable=True}"
    mc:Ignorable="d">
<Window.Resources />

<Grid x:Name="MyLayoutRoot"
      HorizontalAlignment="Stretch"
      VerticalAlignment="Stretch">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="20*" />
    </Grid.ColumnDefinitions>
    <DataGrid x:Name="MyDataGrid"
              Width="Auto"
              Height="Auto"
              HorizontalAlignment="Stretch"
              VerticalAlignment="Stretch"
              AutoGenerateColumns="False"
              CanUserAddRows="False"
              ItemsSource="{Binding Path=PictureSelector}"
              SelectedCellsChanged="Item_SelectionChanged"
              SelectedValuePath="DocId"
              SelectionUnit="FullRow">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding DocNumber}" Header="Tagesnummer" />
            <DataGridTextColumn Binding="{Binding GraphicType}" Header="Grafiktyp" />
            <DataGridTextColumn Binding="{Binding DocId}" Header="Doc ID" />
        </DataGrid.Columns>
        <DataGrid.ColumnHeaderStyle>
            <Style TargetType="{x:Type DataGridColumnHeader}">
                <Setter Property="FontWeight" Value="Bold" />
            </Style>
        </DataGrid.ColumnHeaderStyle>
    </DataGrid>
</Grid>
ItemSelectorViewModel viewModel = new ItemSelectorViewModel();
viewModel.PictureSelector = _dataModel.DokumenteItems;
ItemSelectorView view = new ItemSelectorView(viewModel);
view.Owner = Application.Current.MainWindow;
view.Show();
public ItemSelectorView(ItemSelectorViewModel itemSelectorViewModel)
{
    InitializeComponent();

    if (!Designer.IsInDesignMode())
    {
        DataContext = itemSelectorViewModel;
    }
}