如何在DataGrid上设置d:DataContext d:DesignInstance

And*_*mer 8 .net wpf xaml

xaml:

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <TextBox VerticalAlignment="Center" FocusManager.IsFocusScope="True" Grid.ColumnSpan="2" Name="SearchTextBox" Text="{Binding Path=SearchTerm.Value, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource FontStyle}" KeyUp="SearchTextBoxKeyUp" />

    <DataGrid Grid.Row="1" ItemsSource="{Binding Path=EpisodesView, Mode=TwoWay}" MouseDoubleClick="ListViewDoubleClick" Style="{StaticResource FontStyle}" KeyUp="ListViewKeyup" Name="EpisodeList" AutoGenerateColumns="False" IsReadOnly="True"
              d:DataContext="{d:DesignInstance vm:Episode}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="File" Binding="{Binding File.Name}" />
            <DataGridTextColumn Header="Age" Binding="{Binding PrettyAge}" SortMemberPath="Age" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

在上面的xaml底部的DataGrid中,我无法获得设计时间d:DataContext DesignInstance引用对于DataGrid本身的绑定和特定列的绑定都是正确的.

如果我在DataGrid中包含以下代码片段(如上面的xaml)那么DataGridTextColumns可以工作,并且我得到了列绑定的intellisense:

d:DataContext="{d:DesignInstance vm:Episode}
Run Code Online (Sandbox Code Playgroud)

但现在DataGrid绑定智能感知不再有效.如果我删除上面的代码片段,则反向发生:Intellisense for DataGrid绑定有效,但列绑定不起作用.

为清楚起见,这只是一个设计时问题.一切运行良好的运行时.

bst*_*ney 3

设置该d:DataContext属性会更改设计时使用Episode通过默认构造函数创建的新对象。您可能需要设置IsDesignTimeCreatable为 true

d:DataContext="{d:DesignInstance vm:Episode, d:IsDesignTimeCreatable=True}"
Run Code Online (Sandbox Code Playgroud)

不过我预计您的问题是Episode项目类型并且没有属性EpisodesView。您需要将数据网格设计时数据上下文设置为以下集合Episodes

  • 我会使用静态数据源。类似于 `d:DataContext="{x:Static local:DesignTimeDataSource.Episodes}"` ,其中 `Episodes` 是 `DesignTimeDataSource` 类型的静态属性,并返回要使用的集合。 (3认同)