Как растянуть столбцы сетки данных, чтобы заполнить всю сетку данных и не иметь пустого столбца? [закрыто]C#

Место общения программистов C#
Anonymous
Как растянуть столбцы сетки данных, чтобы заполнить всю сетку данных и не иметь пустого столбца? [закрыто]

Сообщение Anonymous »

Я пытаюсь изменить столбцы сетки данных, чтобы они создавались и растягивались по размерам столбцов. Код следующий:

Код: Выделить всё











Parameter Configuration:

























































































В коде:

Код: Выделить всё

public LogReaderConfig() {
InitializeComponent();

// var vm = (LogReaderConfigViewModel)DataContext;

var container = ((PrismApplication)Application.Current).Container;
var provider = container.Resolve();
_messageBox = provider.GetItem();
DataContextChanged += OnDataContextChanged;
}

private async void OnDataContextChanged(object sender,
DependencyPropertyChangedEventArgs e) {
if (e.NewValue is not LogReaderConfigViewModel vm)
return;

VM = vm;

BuildColumns(vm);

await vm.LoadHistoricalLogConfigData();
}

public void BuildColumns(LogReaderConfigViewModel vm) {
HistoricalLogConfigGrid.Columns.Clear();

foreach (var colDef in vm.HistoricalLogConfigColumns) {
if (colDef.Type == ColumnType.TextBox ||
colDef.Type == ColumnType.TextBlock) {
if (colDef.PropertyName == "Marker") {
var textCol =
new DataGridTextColumn { Header = colDef.Header,
Binding =
new Binding(colDef.PropertyName) {
Mode = BindingMode.OneWay,
},
IsReadOnly = true, Width = 1 };

HistoricalLogConfigGrid.Columns.Add(textCol);
} else {
// var minWidth = GetTextWidth(colDef.Header);

var textCol = new DataGridTextColumn {
Header = colDef.Header,
Binding = new Binding(
colDef.PropertyName) { Mode = BindingMode.TwoWay,
UpdateSourceTrigger =
UpdateSourceTrigger.PropertyChanged },
Width = new DataGridLength(1, DataGridLengthUnitType.Star),
// MinWidth = GetTextWidth(colDef.Header)
};

HistoricalLogConfigGrid.Columns.Add(textCol);
}
} else if (colDef.Type == ColumnType.ComboBox) {
var comboCol = new DataGridComboBoxColumn {
Header = colDef.Header, ItemsSource = colDef.Options,
SelectedValueBinding = new Binding(
colDef.PropertyName) { Mode = BindingMode.TwoWay,
UpdateSourceTrigger =
UpdateSourceTrigger.PropertyChanged },
Width = new DataGridLength(1, DataGridLengthUnitType.Star),
// MinWidth = GetTextWidth(colDef.Header)
};

if (colDef.Params != null) {
comboCol.DisplayMemberPath = colDef.GetParameter("DisplayMember");
comboCol.SelectedValuePath = colDef.GetParameter("SelectedValueMember");
}

if (colDef.UseDefault) {
var defaultValue = colDef.Options.Cast().First();
comboCol.SelectedValueBinding = new Binding(colDef.PropertyName) {
Mode = BindingMode.TwoWay,
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
// FallbackValue = defaultValue
};
} else {
comboCol.SelectedValueBinding = new Binding(colDef.PropertyName) {
Mode = BindingMode.TwoWay,
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
};
}

HistoricalLogConfigGrid.Columns.Add(comboCol);
} else if (colDef.Type == ColumnType.Image) {
// var templateCol = new DataGridTemplateColumn
//{
//     Header = colDef.Header,
//     CellTemplate = new DataTemplate
//     {
//         VisualTree = new FrameworkElementFactory(typeof(Image))
//             .Also(f =>  f.SetBinding(Image.SourceProperty, new
//             Binding(colDef.PropertyName)))
//     }
// };

// HistoricalLogConfigGrid.Columns.Add(templateCol);
}
}

//// Wire PropertyChanged for each row to detect edits
// foreach (var row in vm.fieldEquipment)
//{
//     row.PropertyChanged -= SelectedItem_PropertyChanged;
//     row.PropertyChanged += SelectedItem_PropertyChanged;
// }
}
Я использую это для построения столбцов в модели представления:

Код: Выделить всё

public class DataGridOptions {
public enum ColumnType { TextBox, TextBlock, ComboBox, Image }

public class ColumnDefinition {
public string? Header { get; set; }
public string? PropertyName { get; set; }
public ColumnType Type { get; set; }
public IEnumerable? Options { get; set; }
public object[]? Params { get; set; } = null;
public bool UseDefault { get; set; } = false;
public bool IsReadOnly { get; set; } = true;

public string? GetParameter(string key) {
string? val = null;

foreach (var param in Params) {
if (param is string s && s.Contains("=")) {
var parts = s.Split("=", 2);

if (parts[0] == key)
val = parts[1];
}
}

return val;
}
}
}
По какой-то причине столбцы не растягиваются, они в основном сжимаются, и последние закрывают столбцы.
Изображение

(В базе данных есть запись строки, но я только что удалил содержимое)
Что я делаю неправильно здесь?

Вернуться в «C#»