10

xml:

    <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>

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

如果我在 DataGrid 中包含以下代码段(如上面的 xaml),则 DataGridTextColumns 有效,并且我获得了列绑定的智能感知:

d:DataContext="{d:DesignInstance vm:Episode}

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

明确地说,这只是一个设计时问题。运行时一切正常。

4

1 回答 1

3

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

d:DataContext="{d:DesignInstance vm:Episode, d:IsDesignTimeCreatable=True}"

但是我希望您的问题是Episodeitem type 并且没有 property EpisodesView。您需要将数据网格设计时数据上下文设置为Episodes

于 2013-10-10T02:40:03.063 回答