Код: Выделить всё
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;
}
}
}

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