Мой XAML:Datagrid обновление TemplateColumn источник запуска явно обновляет только первый ряд
<DataGridTemplateColumn Header=" Student ID" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="StudentIdTextBox" Text="{Binding Path=StudentID, UpdateSourceTrigger=Explicit, Mode=TwoWay}" PreviewTextInput="ID_OnPreviewTextInput" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Мой StudentManagementClass:
public class StudentManagement:INotifyPropertyChanged
{
private string StudId;
public bool Check { get; set; }
public int ID { get; set; }
public string StudentID
{
get { return StudId; }
set
{
StudId = value;
PropertyChanged(this, new PropertyChangedEventArgs("StudentID"));
}
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string Gender { get; set; }
public string Birthdate { get; set; }
public string MobileNumber { get; set; }
public string Year { get; set; }
public string Section { get; set; }
public string Department { get; set; }
public string Course { get; set; }
public string Semester { get; set; }
public List<string> AccessLevel { get; set; }
public string AccessLevels { get; set; }
public bool SetTime { get; set; }
public string StartDate { get; set; }
public string Expiration { get; set; }
public event PropertyChangedEventHandler PropertyChanged = delegate { };
}
Пример кода:
public ObservableCollection<SM> StudentManagements { get; set; }
Список Temp (я на самом деле просто проверяя вещи)
StudentManagements = new ObservableCollection<SM>();
List<string> AccessLevel = new List<string>();
AccessLevel.Add("a");
AccessLevel.Add("b");
AccessLevel.Add("c");
AccessLevel.Add("d");
AccessLevel.Add("e");
StudentManagements.Add(new SM()
{
StudentID = "1111",
AccessLevel = AccessLevel,
AccessLevels = "a,c",
Birthdate = "1/1/1993",
Course = "",
Department = "",
Expiration = "1/1/1993",
FirstName = "",
Gender = "Male",
LastName = "",
MobileNumber = "09497740052",
Section = "",
Semester = "1st",
StartDate = "1/1/1993",
Year = "2nd",
SetTime = true,
ID = 1
});
StudentManagements.Add(new SM()
{
StudentID = "2222",
AccessLevel = AccessLevel,
AccessLevels = "e,d",
Birthdate = "1/1/1992",
Course = "",
Department = "",
Expiration = "1/1/1992",
FirstName = "",
Gender = "Male",
LastName = "",
MobileNumber = "09497740052",
Section = "",
Semester = "1st",
StartDate = "1/1/1994",
Year = "2nd",
SetTime = true,
ID = 1
});
Кнопки Явного UpdateSource что обновляет только первую строку вместо всех редактируемых строк (Обратите внимание, что я только тестирование это, поэтому я только попробовал это на один столбец):
x = FindChild<TextBox>(AccessGrid, "StudentIdTextBox");
BindingExpression a = x.GetBindingExpression(TextBox.TextProperty);
a.UpdateSource();
Я получил FindChild от этого парня FindChild
я довольно много имеют тот же вопрос с этим парнем, но никто не отвечает на его вопросы: dude with le same issue
А потом я просто обновить их с помощью кнопки:
AccessGrid.ItemsSource = null;
AccessGrid.ItemsSource = StudentManagements;
Теперь он работает немного, и мое свойство UpdateSourceTrigger установлен в явной, так что я могу сохранить изменения, как только я нажимаю на кнопку, но только первая строка обновляется, есть ли другие способы обновить свойство sourcetrigger явно ?
В коде SM = StudentManagement , правильно ? –
@ Emmanuel да, это было в другом проекте, который я использовал в качестве библиотеки и укоротил его: с использованием SM = DataAccess.Personnel.StudentManagement; – Bryan