2012-04-19 12 views
13

Tengo datos estáticos que quiero mostrar en formato de cuadrícula de datos. Los valores son solo para fines de visualización y no cambiarán. ¿Se puede agregar como una especie de subetiqueta del control Datagrid para poder evitar cualquier cosa en el código subyacente?¿Se pueden definir datos estáticos para filas de cuadrícula de datos puramente en XAML, es decir, sin código subyacente?

Tiene que ser control Datagrid solo porque el propósito es experimentar y demostrar ciertas características de la interfaz de usuario de Datagrid con contenido ficticio blah blah.

Si el contenido XAML puro no es posible, entonces ¿cuál es el mejor método (& sucio) para configurar el contenido ficticio para una cuadrícula de datos? ¿Se puede hacer sin escribir clases, etc.?

Respuesta

6

Comprobar la sección de ejemplos en este MSDN page

Puesto que la cuadrícula de datos utiliza ItemsControl similar a ComboBox o ListBox, cuadrícula de datos debe ser la misma lógica. En ese ejemplo, básicamente crean una colección completa de objetos en XAML puro.

+1

Por qué bajar voto? La gente, si está downvoting en una respuesta, needto tener un decensy de al menos de añadir un comentario sobre "por qué" – Adarsha

+1

es bastante obvio que esta es una respuesta de solo un enlace. – Console

+0

No, no es solo un enlace ... ¡Si me detuviera después de la primera línea, entonces tendría! De hecho, explique por qué el ejemplo en el artículo vinculado realmente será útil para el OP. Por lo tanto, está marcado como "Respuesta aceptada". Pero de todos modos.! – Adarsha

15

Puede hacer datos estáticos en XAML, sí, pero deberá crear una clase simple para el formato de registro. Por ejemplo, puede crear este archivo de clase:

namespace TestNamespace 
{ 
    public class MockRecord 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Email { get; set; } 
    } 
} 

En su cuadrícula de datos XAML se puede hacer esto:

<DataGrid xmlns:local="clr-namespace:TestNamespace"> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" /> 
     <DataGridTextColumn Header="Rate" Binding="{Binding LastName}" /> 
     <DataGridTextColumn Header="Cost" Binding="{Binding Email}" /> 
    </DataGrid.Columns> 

    <!-- Static Data which will automatically go in the datagrid --> 
    <local:MockRecord FirstName="Fred" LastName="Flintstone" Email="[email protected]" /> 
    <local:MockRecord FirstName="Wilma" LastName="Flintstone" Email="[email protected]" /> 
    <local:MockRecord FirstName="Barney" LastName="Rubble" Email="[email protected]" /> 
</DataGrid> 
27

Aquí son datos estáticos pura XAML enganchan en una cuadrícula de datos:

<Window x:Class="WpfStaticDataBinding.XMLWindows" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    Title="XMLWindows" Height="152" Width="294"> 
<Window.Resources> 
    <XmlDataProvider x:Key="MockList" XPath="/MockObjects/*" > 
     <x:XData > 
      <MockObjects xmlns=""> 
       <MockObject Name="Louis" Type="TTTT" Number="1" /> 
       <MockObject Name="Joseph" Type="TTTT" Number="2" /> 
       <MockObject Name="Papineau" Type="ZZZZ" Number="3" /> 
      </MockObjects> 
     </x:XData> 
    </XmlDataProvider> 
</Window.Resources> 
<Grid DataContext="{Binding Source={StaticResource MockList}}"> 
    <DataGrid HorizontalAlignment="Stretch" Margin="10" VerticalAlignment="Stretch" 
       ItemsSource="{Binding Mode=Default, XPath=/MockObjects/MockObject}" 
       AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Name" Binding="{Binding [email protected]}" ></DataGridTextColumn> 
      <DataGridTextColumn Header="Type" Binding="{Binding [email protected]}"></DataGridTextColumn> 
      <DataGridTextColumn Header="Number" Binding="{Binding [email protected]}"></DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

Resultado:

enter image description here

yo no era capaz de autogenerar columnas utilizando XmlDataProvider (probablemente estoy perdiendo algo):

<Grid DataContext="{Binding Source={StaticResource MockList}}"> 
    <DataGrid HorizontalAlignment="Stretch" Margin="10" VerticalAlignment="Stretch" 
       ItemsSource="{Binding Mode=Default, XPath=/MockObjects/MockObject}"> 
    </DataGrid> 
</Grid> 

enter image description here

pero utilizando un código Detrás de clase como Dave sugerencia permitir autobinding a trabajar y en mi opinión es mucho más simple (yo prefería el enfoque ResourceDictionary sin embargo):

Código:

namespace WpfStaticDataBinding 
{ 
    public class MockRecord 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Email { get; set; } 
    } 
} 

XAML

<Window x:Class="WpfStaticDataBinding.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfStaticDataBinding" 
    Title="MainWindow" Height="157" Width="302"> 
<Window.Resources> 
    <ResourceDictionary> 
     <x:Array x:Key="MyDumbMockedList" Type="local:MockRecord"> 
      <local:MockRecord FirstName="Fred" LastName="Flintstone" Email="[email protected]" /> 
      <local:MockRecord FirstName="Wilma" LastName="Flintstone" Email="[email protected]" /> 
      <local:MockRecord FirstName="Barney" LastName="Rubble" Email="[email protected]" /> 
     </x:Array> 
    </ResourceDictionary> 
</Window.Resources> 
<Grid> 
    <DataGrid Margin="10" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
       ItemsSource="{Binding Source={StaticResource MyDumbMockedList}}"/> 
</Grid> 

+0

Gracias por dejar eso, Guish. Seguí tu primer ejemplo pero obtengo este error de tiempo de ejecución: 'System.Windows.Data Error: 50: XmlDataProvider tiene XML en línea que no establece explícitamente su XmlNamespace (xmlns = "")'. Sin embargo, los datos aparecen en la cuadrícula.Pero si elimino el espacio de nombres, los datos no se insertan en la cuadrícula, pero no aparece ningún mensaje de error. Si pongo "x" (sin las comillas), tampoco funciona. ¿Cómo puedo resolver este enigma? – SezMe

+0

Hice una pequeña búsqueda y encontré este enlace .... No sé si puede ayudarlo: [http://blog.wouldbetheologian.com/2009/07/why-wpf-databinding-is-awful- technology.html] (http://blog.wouldbetheologian.com/2009/07/why-wpf-databinding-is-awful-technology.html) – Guish

+0

El ejemplo en ese enlace TAMBIÉN proporciona un Error 50. Basado en el primer ejemplo en este [enlace] (http://stackoverflow.com/questions/24173979/issues-with-data-binding-while-working-with-wpf) Intenté agregar una XmlNamespaceMappingCollection a mi Window.Resources pero recibo el error mensaje: El tipo no implementa IList: XmlNamespaceMappingCollection. Así que estoy atascado de nuevo. – SezMe

Cuestiones relacionadas