У меня проблемы с datagrid. Когда я запускаю событие RowEditEnding, я получаю следующую ошибку: «Двусторонняя привязка требует Path или XPath». Я хочу исправить это весь день, но не смог найти решение. Любые идеи приветствуются. Заранее спасибо!WPF DataGrid с ComboBox - Требуется двухсторонняя привязка Path или XPath
XAML
<Window.Resources>
<staticData:AlarmFilesList x:Key="AlarmFilesList"/>
</Window.Resources>
XAML
<DataGrid x:Name="alarmProfilesDataGrid" Margin="10,60,10,50" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding AlarmTime, NotifyOnTargetUpdated=True, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Alarm Time" Width="75" MinWidth="75"/>
<DataGridTemplateColumn Header="Alarm File" Width="*" MinWidth="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding AlarmFile}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{StaticResource AlarmFilesList}" SelectedItem="{Binding AlarmFileDescription}" SelectionChanged="ComboBox_SelectionChanged"/>
<!--<ComboBox x:Name="AlarmFilesListComboBox" Text="{Binding AlarmFileDescription, NotifyOnSourceUpdated=True, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedValue="{Binding Id, NotifyOnSourceUpdated=True, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="AlarmFileDescription" SelectedValuePath="Id" Loaded="AlarmFilesListComboBox_Loaded" />-->
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Вот класс, который заполняет выпадающий список
class AlarmFilesList : List<string>
{
BreakBuzzerEntities breakBuzzerContext = new BreakBuzzerEntities();
public AlarmFilesList()
{
var alarmFiles = (from af in breakBuzzerContext.AlarmFiles select af).ToList();
foreach (AlarmFile currentFile in alarmFiles)
{
this.Add(currentFile.AlarmFileDescription);
}
}
}
End здесь также соответствующий код
private void getSelectedAlarmProfile(AlarmProfileDefinition selectedAP)
{
Mouse.OverrideCursor = Cursors.Wait;
List<AlarmProfileData> alarmProfileData = new List<AlarmProfileData>();
var alarmProfileList = (from alarmProfile in breakBuzzerContext.AlarmProfiles
where alarmProfile.AlarmProfileDefinitionId == selectedAP.Id
select alarmProfile).ToList().OrderBy(x => x.AlarmTime);
foreach (AlarmProfile alarmProfileItem in alarmProfileList)
{
alarmProfileData.Add(new AlarmProfileData { AlarmTime = alarmProfileItem.AlarmTime, AlarmTimeId=alarmProfileItem.Id, AlarmFile=alarmProfileItem.AlarmFile.AlarmFileDescription, AlarmFileId=alarmProfileItem.AlarmFileId });
}
alarmProfilesDataGrid.ItemsSource = null;
alarmProfilesDataGrid.ItemsSource = alarmProfileData;
alarmProfilesDataGrid.DataContext = this;
Mouse.OverrideCursor = null;
}
public class AlarmProfileData
{
public TimeSpan AlarmTime { get; set; }
public int AlarmTimeId { get; set; }
public string AlarmFile { get; set; }
public int AlarmFileId { get; set; }
}
private void alarmProfilesDataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
var apData = alarmProfilesDataGrid.SelectedItem;
if (apData != null)
{
}
}
где указано ваше свойство AlarmFileDescription? – shreesha
Это столбец в таблице AlarmFile в базе данных – Steven