Silverlight에서 Datagrid에 데이터를 수동으로 추가하는 방법
-
22-07-2019 - |
문제
DataGrid 열이 Silverlight에서 동적으로 만들어 묶을 수 있음을 발견했습니다. 그러나 데이터를 해당 열에 바인딩하는 방법을 찾을 수 없습니다.
AutogenerateColumns = true로 모든 유형의 객체를 바인딩하려고하면 객체의 각 속성의 이름이 열로 추가되고 데이터가 표시되지 않는 기존 열 외에 객체 정보가 그리드에 표시됩니다.
AutogenerateColumns = false로 목록을 적용하면 테이블에 표시가 표시되지만 열에는 데이터가 없습니다.
Datagird에 데이터를 표시 해야하는 각 케이스에 대해 특정 객체를 만들고 싶지 않습니다.
내 열 이름이 속성의 이름으로 제한되고 싶지 않아 공백이있는 이름을 갖고 싶지 않습니다.
목록이나 사전 배열을 데이터 그리드에 바인딩 할 수 있기를 원합니다. 또한 어떤 열에 어떤 데이터가 표시되는지 제어 할 수 있기를 원합니다.
해결책
정보를 바인딩하려는 클래스 나 다른 컨테이너가 있다고 가정하면 다음을 수행 할 수 있습니다.
DataGridTextColumn product = new DataGridTextColumn();
product.Binding = new System.Windows.Data.Binding("Product");
product.Header = "Product";
DataGridTextColumn date = new DataGridTextColumn();
date.Binding = new System.Windows.Data.Binding("Date");
date.Header = "Date";
DataGridTextColumn version = new DataGridTextColumn();
version.Binding = new System.Windows.Data.Binding("FileVersion");
version.Header = "Version";
DataGridTextColumn timestamp = new DataGridTextColumn();
timestamp.Header = "TimeStamp";
timestamp.Binding = new System.Windows.Data.Binding("TimeStamp");
DataGridTextColumn user = new DataGridTextColumn();
user.Header = "User";
user.Binding = new System.Windows.Data.Binding("User");
rpdata.Columns.Add(product);
rpdata.Columns.Add(date);
rpdata.Columns.Add(version);
rpdata.Columns.Add(timestamp);
rpdata.Columns.Add(user);
이제 DataGrid의 ItemSource를 가지고있는 항목 모음으로 설정하십시오.
이를 통해 표시하려는 헤더를 설정할 수 있으며 컨테이너의 변수에 정보를 바인딩하므로 추가 한 열의 정보 만 표시됩니다.
다른 팁
당신은 아마 거의 거기에 있지만 당신의 XAML에 미묘하게 잘못된 것이 있습니다. 여기에 작업 예가 있습니다.
<UserControl x:Class="Testproject.EditableDataGrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
<data:DataGrid x:Name="myDataGrid" AutoGenerateColumns="False">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="My text" Binding="{Binding StringValue}" />
<data:DataGridCheckBoxColumn Header="Check Box" Binding="{Binding IsChecked}" />
<data:DataGridTemplateColumn Header="A template column">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Rectangle Width="20" Height="5" Fill="Red"/>
<TextBlock Text="{Binding IntValue}" />
</StackPanel>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
<data:DataGridTextColumn Header="My int" Binding="{Binding IntValue}" />
</data:DataGrid.Columns>
</data:DataGrid>
</Grid>
</UserControl>
using System.Windows;
using System.Windows.Controls;
using System.Collections.Generic;
namespace Testproject
{
public partial class EditableDataGrid :UserControl
{
public EditableDataGrid()
{
InitializeComponent();
myDataGrid.ItemsSource = new List<ClassForDataGridTest>()
{
new ClassForDataGridTest() {StringValue="hello", IntValue=21, IsChecked=false}
, new ClassForDataGridTest() {StringValue="the second", IntValue=122, IsChecked = true}
};
}
}
public class ClassForDataGridTest : DependencyObject
{
public string StringValue {get; set;}
public int IntValue {get; set;}
public bool IsChecked { get; set; }
}
}
제휴하지 않습니다 StackOverflow