Ich arbeite an einer WPF-Anwendung mit einem DataGrid, das Spalten manuell definiert hat. In diesem DataGrid soll der Benutzer Daten einschließlich einer unteren Grenze (ein Dezimalwert) und eines Vergleichszeichens ("<" oder "< =") eingeben können.Bestehende Daten in WPF nicht sichtbar DataGridComboBoxColumn an ObservableCollection gebunden
Das Datagrid selbst an einem ObservableCollection namens StepDataSource gebunden ist, - die nicht Teil des Viewmodels ist -
/// <summary>
/// Gets or sets the data of the stepfunction.
/// </summary>
public ObservableCollection<StepData> StepDataSource
{
get { return stepdataSource; }
set
{
stepdataSource = value;
RaisePropertyChanged("StepDataSource");
}
}
Die Klasse StepData enthält die folgenden Eigenschaften:
/// <summary>
/// Gets or sets the lower bound.
/// </summary>
public double LowerBound { get; set; }
/// <summary>
/// Gets or sets the assigned value.
/// </summary>
public double StepValue { get; set; }
/// <summary>
/// Gets or sets the lower comparer.
/// </summary>
public ArithmeticSignData LowerComparer2 { get; set; }
Die letzte Eigenschaft LowerComparer2 wird für den Artikel benötigt, der in der ComboBox ausgewählt wurde.
Einer meiner Spalten im Datagrid ist ein DataGridComboBoxColumn, die auf eine andere ObservableCollection in meinem Viewmodel gebunden ist:
public ObservableCollection<ArithmeticSignData> LowerComparers2 { get; set; }
Die Klasse ArithmeticSignData enthält Eigenschaften für den Schlüssel und Wert, der durch die ComboBox verwendet werden soll.
public class ArithmeticSignData
{
/// <summary>
/// The constructor.
/// </summary>
/// <param name="key">The key.</param>
/// <param name="value">The value.</param>
public ArithmeticSignData(string key, string value)
{
ArithmeticSignKey = key;
ArithmeticSignValue = value;
}
public string ArithmeticSignKey { get; set; }
public string ArithmeticSignValue { get; set; }
}
Im Viewmodel Ich bin dieser Sammlung Füllung:
LowerComparers2 = new ObservableCollection<ArithmeticSignData>();
LowerComparers2.Add(new ArithmeticSignData("1", "<"));
LowerComparers2.Add(new ArithmeticSignData("2", "<="));
Dann definiert i die Spalte im Datagrid wie folgt aus:
<DataGrid x:Name="grd_stepdata"
Grid.Row="0"
Grid.Column="0"
Margin="5"
AutoGenerateColumns="False"
CanUserAddRows="True"
CanUserDeleteRows="True"
SelectionUnit="FullRow"
ItemsSource="{Binding StepDataSource, NotifyOnSourceUpdated=True, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridComboBoxColumn x:Name="col_LowerComparer2"
SelectedItemBinding="{Binding LowerComparer2, NotifyOnSourceUpdated=True, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="ArithmeticSignValue"
Header="LowComp"/>
</DataGrid.Columns>
</DataGrid>
von einigen Artikeln in diesem Forum habe ich gelernt, dass die ItemsSource in Code-Behind eingestellt werden muss:
col_LowerComparer2.ItemsSource = vm.LowerComparers2;
Wenn ich die App starte und ein Element auswähle, kann ich in meiner viewmodel-Eigenschaft LowerComparer2 das ausgewählte Element mit dem richtigen Schlüssel und Wert sehen. Leider kann ich die Daten aus dem Viewmodel in der Spalte nicht sehen, nachdem ich die App gestartet habe.
Habe ich ein oder mehrere Attribute vergessen?
Ist die StepDataSource Sammlung Ansicht Modellobjekte enthalten, dh Objekte des Typs, in dem die LowerComparer2 und die LowerComparers2 Eigenschaften definiert sind, ? Oder was ist StepDataSource und wo ist es definiert? – mm8