2012-07-30 5 views
7

el XAML: Cómo establecer d: DataContext d: DesignInstance en la cuadrícula de datos

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

En la cuadrícula de datos en la parte inferior de la xaml anteriormente no puedo obtener AMBOS el tiempo de diseño d: las referencias DataContext DesignInstance son correctas tanto para el enlace del DataGrid mismo e enlaces de las columnas específicas.

Si incluyo el siguiente fragmento de la cuadrícula de datos (como el xaml arriba) los DataGridTextColumns funciona, y consigo IntelliSense para los enlaces de la columna:

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

Pero ahora el intellisense vinculante cuadrícula de datos ya no funciona. Si elimino el fragmento, sucede lo contrario: el enlace Intellisense para DataGrid funciona, pero los enlaces de columna no.

Para que quede claro, este es solo un problema de tiempo de diseño. Todo funciona bien en tiempo de ejecución.

+0

Mi sensación es que esto es sólo el comportamiento incorrecto del editor de Visual Studio XAML. Es un poco raro en este contexto. – ColinE

+0

Entonces, ¿sería correcto establecer DesignInstance en DataGrid con el tipo de filas? –

Respuesta

1

Establecer la propiedad d:DataContext cambia el tiempo de diseño para utilizar un nuevo objeto Episode creado con el constructor predeterminado. Es posible que necesite configurar IsDesignTimeCreatable a cierto

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

Sin embargo espero que su problema es que Episode es el tipo de elemento y no tiene una propiedad EpisodesView. Tendrá que establecer el contexto de datos en tiempo de diseño de cuadrícula de datos a una colección de Episodes

+0

¿Cómo puedo establecer el contexto de datos de tiempo de diseño de cuadrícula de datos en una colección? –

+3

Usaría una fuente de datos estática. Algo como 'd: DataContext =" {x: Static local: DesignTimeDataSource.Episodes} "' donde 'Episodes' es una propiedad estática del tipo' DesignTimeDataSource' y devuelve la colección para usar. – bstoney