Я создаю приложение, в котором я следую шаблону MVVM (насколько это возможно), и я использую Prism, чтобы упростить это.
У меня есть представление, в котором пользователь может редактировать одну ячейку и в этой ячейке выбрать значение из ComboBox. Я хотел бы следить за изменением значения ComboBox выбранной строки. Например. значение изменено с "Bio" на "Pleje".
Я не знаю, как это сделать. Я знаю, что для выбранного элемента есть событие "PropertyChanged", но где я должен подписаться на него? Невозможно сделать в конструкторе, так как выбранный элемент будет нулевым.
<DataGrid Grid.Column="0" Grid.Row="2" AlternationCount="2" AlternatingRowBackground="#cee8ff" CanUserAddRows="False" AutoGenerateColumns="False" ItemsSource="{Binding Path=Familier}" SelectedItem="{Binding ValgtFamilie, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Header="Cpr" Binding="{Binding Path=CPR}" IsReadOnly="True"/>
<DataGridTextColumn Header="Fornavn" Width="*" Binding="{Binding Path=Fornavn}" IsReadOnly="True"/>
<DataGridTextColumn Header="Efternavn" Width="*" Binding="{Binding Path=Efternavn}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="Forældre Type">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=ForældreTypeKategori}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=DataContext.ForældreTypeKategorier, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" SelectedItem="{Binding Path=ForældreTypeKategori, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
ViewModel:
private Familie valgtFamilie;
public Familie ValgtFamilie
{
get { return valgtFamilie; }
set { valgtFamilie = value; SetProperty(ref valgtFamilie, value); }
}
Модель:
internal class Familie : BindableBase
{
private string cpr;
public string CPR
{
get { return cpr; }
set { cpr = value; SetProperty(ref cpr, value); }
}
private string fornavn;
public string Fornavn
{
get { return fornavn; }
set { fornavn = value; SetProperty(ref fornavn, value); }
}
private string efternavn;
public string Efternavn
{
get { return efternavn; }
set { efternavn = value; SetProperty(ref efternavn, value); }
}
private ForældreTypeKategori forældreTypeKategori;
public ForældreTypeKategori ForældreTypeKategori
{
get { return forældreTypeKategori; }
set { forældreTypeKategori = value; SetProperty(ref forældreTypeKategori, value); }
}
}