#c# #wpf
#c# #wpf
Вопрос:
Привет, у меня есть наблюдаемая коллекция списка пакетов типа packet. Каждый пакет состоит из 3 различных наблюдаемых коллекций данных типа. Этими 3 различными наблюдаемыми коллекциями являются класс заголовка, класс фрейма и класс хвоста. Я пытаюсь извлечь значения типа data и поместить их в один столбец в datagrid. То же самое для фрейма и хвоста. Однако, как мне выполнить привязку наблюдаемой коллекции данных к одному столбцу?
namespace macframe
{
public class Packet
{
private ObservableCollection<Packet> items;
private Header header;
private Frame frame;
private Tail tail;
public Packet(Header header, Frame frame, Tail tail)
{
this.header = header;
this.frame = frame;
this.tail = tail;
items = new ObservableCollection<Packet>();
}
}
public class Data
{
private String sDatavalue;
public Data(String datavalue)
{
this.sDatavalue = datavalue;
}
public string datavalue
{
get { return sDatavalue; }
set { sDatavalue = datavalue; }
}
}
public class Header
{
private ObservableCollection<Data> headerItems;
public Header()
{
headerItems = new ObservableCollection<Data>();
}
public ObservableCollection<Data> header
{ get { return headerItems; } }
}
public class Frame
{
private ObservableCollection<Data> frameItems;
public Frame()
{
frameItems = new ObservableCollection<Data>();
}
public ObservableCollection<Data> frame
{ get { return frameItems; } }
}
public class Tail
{
private ObservableCollection<Data> tailItems;
public Tail()
{
tailItems = new ObservableCollection<Data>();
}
public ObservableCollection<Data> tail
{ get { return tailItems; } }
}
}
<Window x:Class="macframe.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid Name="dgrid">
</DataGrid>
</Grid>
Комментарии:
1. Можете ли вы опубликовать код для класса Packet?
2. код обновлен. интересно, может ли datagrid отображать содержимое моего заголовка, фрейма или хвостового класса без проверки типа данных?
3. можете ли вы также показать XAML для DataGrid?
4. я не добавлял dgrid. Оператор DataContext пока нет, потому что я не уверен в том, как представить мой вопрос выше
5. Просто чтобы быть ясным здесь —
Header
,Frame
иTail
все ли классы содержат anObservableCollection<Data>
? Содержат ли они что-нибудь еще? Вы хотите иметь столбец в datagrid дляHeader
, один дляFrame
и один дляTail
? Это правильно?
Ответ №1:
Если я правильно понял ваше намерение, вы хотите, чтобы в одной сетке отображались три разные коллекции, каждая из которых не зависит от двух других. То есть, короче говоря, невозможно.
Вы можете привязать свою сетку только к одному источнику (задайте свойство ItemsSource), и это должен быть тип коллекции, чтобы заставить его работать (WPF автоматически генерирует CollectionView вокруг свойств, привязанных к ItemsControls).
Если есть способ связать ваши данные плоским способом, вы должны это сделать. Но мне кажется, что вы намерены отображать иерархические данные … Пожалуйста, предоставьте краткий список образцов записей (поддельных данных достаточно), чтобы мы могли видеть, как вы ожидаете, что ваша сетка будет выглядеть.