Как расположить элементы через Binding в виде таблицы? DataGrid не предлагайте, не подходит.
Когда делаю вручную
<ItemsControl ItemsSource="{Binding CurrentTable.MyRows}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<UniformGrid Columns="{Binding Cells.Count}">
<TextBlock Text="{Binding Cells[0].Text}"/>
<TextBlock Text="{Binding Cells[1].Text}"/>
<TextBlock Text="{Binding Cells[2].Text}"/>
<TextBlock Text="{Binding Cells[3].Text}"/>
<TextBlock Text="{Binding Cells[4].Text}"/>
</UniformGrid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Всё работает. Если пробую биндить, не выходит
<ItemsControl ItemsSource="{Binding CurrentTable.MyRows}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<UniformGrid Columns="{Binding Cells.Count}">
<ItemsControl ItemsSource="{Binding Cells}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Text}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</UniformGrid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Что делаю не так? Как правильно сделать?
Давайте я всё же набросаю пример с GridView
.
Начнём со структуры данных. Я отделю заголовки столбцов от информации в столбцах.
Выходит:
class Table
{
public string[] Headers { get; set; }
public IEnumerable<string[]> Rows { get; set; }
}
Окей, у нас переменное количество столбцов, которое мы не знаем. Тогда сгенерируем столбцы на лету. Чтобы получать нотификацию, когда свойство Headers
поменяется, воспользуемся трюком с невидимым элементом. (Чтобы это работало, ваш класс Table
должен ещё и поддерживать интерфейс INotifyPropertyChanged
!)
Наш XAML получается совсем простым.
<Grid Visibility="Collapsed" Name="Dummy" DataContext="{Binding Headers}"
DataContextChanged="OnRowsChanged"/>
<ListView ItemsSource="{Binding Rows}" Name="List">
<ListView.View>
<GridView AllowsColumnReorder="True" x:Name="GridView"/>
</ListView.View>
</ListView>
Ну и немного code-behind:
void OnRowsChanged(object sender, DependencyPropertyChangedEventArgs e)
{
var rows = (IEnumerable<string>)((FrameworkElement)sender).DataContext;
GridView.Columns.Clear();
int no = 0;
foreach (var row in rows)
{
GridView.Columns.Add(new GridViewColumn()
{
Header = row,
DisplayMemberBinding = new Binding($"[{no}]")
});
no++;
}
}
Получается:
Виртуальный выделенный сервер (VDS) становится отличным выбором
Внимание! Это перевод вопроса How to use C# nameof() with ASPNET MVC Url
Товарищи, тут возникла следующая проблемка: имею в VS проект на С#, в котором имеется статический класс, в статическом инициализаторе которого...
Как задать направление гравитации по оси Z для частиц Particle System в Unity используя С#Желательно чтобы ось Z синхронизировалась с осью Z другого...