2011-07-16 22 views
0

IListがDataGridにバインドされているときに問題が発生しました。WPF DataGridバインディング

public class Customer 
{ 
    public virtual int CustomerID { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string AddressLine1 { get; set; } 
    public virtual string AddressLine2 { get; set; } 
    public virtual string AddressLine3 { get; set; } 
    public virtual bool IsActive { get; set; } 
    public virtual SalesLine SalesLine { get; set; } 
    public virtual int Precedence { get; set; } 
} 

public class SalesLine 
{ 
    public virtual int SalesLineID { get; set; } 
    public virtual string Name { get; set; } 
    public virtual SalesPerson SalesPerson { get; set; } 
    public virtual IList<Customer> Customers { get; set; } 
} 

クラス構造があるが、私は、Customerクラスの新しいのIListを作成します。

IList<Customer> customerList = new IList<Customer>(); 

"customerList"が入力されます。 顧客にはSalesLineがあるため、 "salesLines" IListにはデータベース内のすべての販売ラインが設定されます。

は今、私はデータグリッドにCUSTOMERLISTをバインドしようと思ってXAMLを次のように、

<DataGrid AutoGenerateColumns="False" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" 
        Name="grdCustomers" VerticalAlignment="Stretch" Grid.ColumnSpan="2" 
        ItemsSource="{Binding CustomerList}" CanUserAddRows="True"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="250" /> 
       <DataGridTextColumn Header="Address Street" Binding="{Binding AddressLine1}" Width="150" /> 
       <DataGridTextColumn Header="Address Town" Binding="{Binding AddressLine2}" Width="150" /> 
       <DataGridTextColumn Header="Address Area" Binding="{Binding AddressLine3}" Width="150" /> 
       <DataGridCheckBoxColumn Header="Is Active" Binding="{Binding IsActive}" Width="75" /> 
       <DataGridComboBoxColumn Header="Sales Line" Width="150" 
         SelectedItemBinding="{Binding SalesLine}" 
         SelectedValuePath="SalesLineID" 
         DisplayMemberPath="Name"> 
        <DataGridComboBoxColumn.ElementStyle> 
         <Style TargetType="ComboBox"> 
          <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.SalesLineList}"/> 
         </Style> 
        </DataGridComboBoxColumn.ElementStyle> 
        <DataGridComboBoxColumn.EditingElementStyle> 
         <Style TargetType="ComboBox"> 
          <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.SalesLineList}"/> 
         </Style> 
        </DataGridComboBoxColumn.EditingElementStyle> 
       </DataGridComboBoxColumn> 
      </DataGrid.Columns> 
     </DataGrid> 

は、今では適切に販売ラインの列を除くすべての列を表示します。

SalesLineを列にバインドしたにもかかわらず、現在の行の販売ライン名がグリッドに表示されません。ただし、ドロップダウンボックスをクリックすると、ドロップダウンが設定されます。

私は販売ラインの列に販売ライン名を表示するのを手伝ってください。 Customer.SalesLineプロパティは、あなたが自分のIDが一致した場合に2つのオブジェクトが同じであることにするSalesLineクラスでToString()メソッドを上書きする必要がSalesLineList

内のオブジェクトを指していないので、

答えて

1

これはおそらくです。デフォルトでは、memoroy内の全く同じオブジェクトを参照する場合にのみ、同じものと見なされます。

関連する問題