10

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>

上記の xaml の下部にある DataGrid では、DataGrid 自体のバインディングと特定の列のバインディングの両方に対して、設計時の d:DataContext DesignInstance 参照を正しく取得することができません。

次のスニペットを DataGrid に (上記の xaml として) 含めると、DataGridTextColumns が機能し、列バインディングのインテリセンスが得られます。

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

しかし、DataGrid バインディングのインテリセンスは機能しなくなりました。上記のスニペットを削除すると、逆のことが起こります。DataGrid バインディングの Intellisense は機能しますが、列バインディングは機能しません。

明確にするために、これは設計時の問題にすぎません。すべてが正常に動作します。

4

1 に答える 1

3

プロパティを設定すると、既定のコンストラクターを使用して作成されd:DataContextた新しいEpisodeオブジェクトを使用するように設計時間が変更されます。IsDesignTimeCreatabletrueに設定する必要がある場合があります

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

ただし、あなたの問題はEpisodeアイテムタイプであり、プロパティを持たないことだと思いますEpisodesView。データ グリッドの設計時のデータ コンテキストを次のコレクションに設定する必要があります。Episodes

于 2013-10-10T02:40:03.063 に答える