2011-06-21 11 views
1

我有一個網格綁定到對象列表,SelectedIndex綁定到一個屬性,我希望這SelectedIndex正常工作,因爲索引更改排序,但模型中的集合沒有得到排序,所以索引確實不涉及該模型。當網格本身排序時,如何獲取DataGrid對ObservableCollection的支持進行排序?

標記鑑於:模型

public ObservableCollection<Customer> Customers { 
    get; 
    private set; 
} 

private int selectedIndex; 
public int SelectedIndex { 
    get { return selectedIndex; } 
    set { 
     if (selectedIndex != value) { 
      selectedIndex = value; 
      OnNotifyPropertyChanged("SelectedIndex"); 
      OnNotifyPropertyChanged("SelectedCustomer"); 
     } 
    } 
} 

public Customer SelectedCustomer { 
    get { return CustomersView[selectedIndex]; } 
} 

我使用這種方法,因爲我有「下一首/上」按鈕和標籤綁定爲「y客戶的X

<DataGrid Name="gridCustomers" 
      ItemsSource="{Binding Customers}" 
      SelectedIndex="{Binding SelectedIndex}" 
      CanUserSortColumns="True" 
      SelectionUnit="FullRow"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Customer" Binding="{Binding ID}" /> 
     <DataGridTextColumn Header="Name" Binding="{Binding Name}" /> 
    </DataGrid.Columns> 
</DataGrid> 

代碼」。 SelectedCustomer是兒童控制的便利屬性,在這種情況下顯示不正確的對象。

回答

1

我已經設法解決此問題,方法是使用SelectedIndexSelectedItem綁定屬性,而不是通過列表本身進行導航。

查看:

<DataGrid Name="gridCustomers" 
      ItemsSource="{Binding Path=Customers}" 
      SelectedIndex="{Binding SelectedIndex}" 
      SelectedItem="{Binding SelectedCustomer}" 

型號:

public ObservableCollection<Customer> Customers { 
    get; 
    private set; 
} 

private int selectedIndex; 
public int SelectedIndex { 
    get { return selectedIndex; } 
    set { 
     if (selectedIndex != value) { 
      selectedIndex = value; 
      OnNotifyPropertyChanged("SelectedIndex"); 
      OnNotifyPropertyChanged("NavText"); 
     } 
    } 
} 

private Customer selectedCustomer; 
public Customer SelectedCustomer { 
    get { return selectedCustomer; } 
    set { 
     if (!Object.Equals(selectedCustomer, value)) { 
      selectedCustomer = value; 
      OnNotifyPropertyChanged("SelectedCustomer"); 
     } 
    } 
} 

public string NavText { 
    get { 
     if (Customers.Count == 0) 
      return "No Customers"; 
     if (SelectedIndex == -1) 
      return String.Format("{0} customers", customers.Count); 
     return String.Format("{0} of {1}", SelectedIndex + 1, Customers.Count); 
    } 
} 

public void First() { 
    if (Customers.Count == 0) 
     return; 
    SelectedIndex = 0; 
} 

public void Last() { 
    if (Customers.Count == 0) 
     return; 
    SelectedIndex = Customers.Count - 1; 
} 

public void Next() { 
    if (Customers.Count == 0 || SelectedIndex == Customers.Count - 1) 
     return; 
    SelectedIndex++; 
} 

public void Previous() { 
    if (Customers.Count == 0 || SelectedIndex <= 0) 
     return; 
    SelectedIndex--; 
} 
相關問題