我有一個WPF DataGrid綁定到名爲「Personnel」的ObservableCollection。 DataGrid中有一個可編輯的DataGridCheckBoxColumn。 CheckBoxColumn綁定到我的集合中名爲「AircraftCommanderSelected」的布爾值。選中某一行並選中該複選框後,會觸發一個事件來更新集合,以便每個「人員」的所有AircraftCommanderSelected值都設置爲false(除剛剛設置爲true的那個值外)。這就是說,我的集合正確更新,但我的數據網格不會'取消'以前選中的框,誰的綁定值已被更改爲false。我如何通知價值已更改?以下是我的代碼(爲便於閱讀而修改)。當ObservableCollection值更新時WPF Datagrid綁定不更新
類
public class Personnel
{
///
///Other objects removed for reading purposes. All follow same format.
///
private bool aircraftCommanderSelected;
public bool AircrafCommanderSelected
{
get { return this.aircraftCommanderSelected; }
set
{
if(this.aircraftCommanderSelected != value)
{
this.aircraftCommanderSelected = value;
this.NotifyPropertyChanged("AircraftCommanderSelected");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(strin propName)
{
if(this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
XAML
<DataGrid Name="dataGrid" AutoGenerateColumns="False" SelectedItem="{Binding Personnel}" CanUserDeleteRows="False" CanUserAddRows="False" IsReadOnly="False" SelectionMode="Single" CellEditEnding="dataGrid_CellEditEnding">
<DataGrid.Columns>
<DataGridCheckBoxColumn local:DataGridUtil.Name="ac" Header="AC" Binding="{Binding AircraftCommanderSelected}"/>
</DataGrid.Columns>
</DataGrid>
代碼
private void dataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
foreach (Personnel p in vm.personnel)//Loop through each item in the collection
{
//per.ID is the ID of the person who was just edited.
//This sets everyones value to false except the person that was just edited.
if (p.ID != per.ID) { p.AircraftCommanderSelected = false; }
}
}
背後,當收集被修改,屬性更改事件被激發,不應該將DataGrid更新?
我發現了一個解決方案,但它涉及多線程,這似乎是一個不正確的解決方案,這個問題。我也不喜歡它如何刷新整個網格,並取消選擇我目前的選擇
dataGrid.Dispatcher.BeginInvoke(new Action(() => dataGrid.Items.Refresh()), System.Windows.Threading.DispatcherPriority.Background);
任何幫助表示讚賞。
感謝
-Justin
謝謝!所有3個答案都將我引向解決方案,因爲它是一個組合,但您的問題涵蓋了大部分問題。我在我的NotifyPropertyChanged事件的字符串末尾有一個空格。修復以及將我的綁定模式更改爲TwoWay並將NotifyPropertyChanged添加到我的類聲明中解決了問題。 – Tronald