2016-04-05 1 views
0

は私がサーバリストにリストを持っているAddServerWindowと呼ばれる第二のクラスでは、クラスバインディングカスタムオブジェクトのリストが

public class ServerList 
{ 
    public ServerList(string ipAdress, int port) 
    { 
     IPAdress = ipAdress; 
     Port = port; 
    } 

    public string IPAdress { get; private set; } 
    public int Port { get; private set; } 
} 

を持っているのDataGrid、私はメインウィンドウ上に置くのDataGridにバインドするにはどうすればよい

public ObservableCollection<ServerList> ServerLists = new ObservableCollection<ServerList>(); 

オブジェクトにします。 が、私はこのようになめらかにしようとしている:

DataContext = new 
     { 
      dump = this, 
      server = new AddServerWindow(), 
     }; 

MainWindow.xaml

<DataGridTextColumn Header="Server" IsReadOnly="True" Width="*" Binding="{Binding server.IPAdress}"></DataGridTextColumn> 
<DataGridTextColumn Header="Port" IsReadOnly="True" Width="0.6*" Binding="{Binding server.Port}"></DataGridTextColumn> 

でMainWindow.csでは以下のコードに変更した後、DataGridが空のままであるが、それは今10列

を持っています
ItemsSource="{Binding Source=ServerLists}" 

答えて

1

あなたは、DataGridののItemsSourceをバインドする必要があります。これを行うと、各行のDataContextはServerListになります。そのため、列をIPAdressとPortに直接バインドできます。

<DataGrid ItemsSource="{Binding server.ServerLists}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Server" IsReadOnly="True" Width="*" Binding="{Binding IPAdress}"/> 
     <DataGridTextColumn Header="Port" IsReadOnly="True" Width="0.6*" Binding="{Binding Port}"/> 
    </DataGrid.Columns> 
</DataGrid> 
+0

あなたが言っているように、ItemsSource = "{Binding Source = ServerLists}"と言うと、今は空の行が10個あります。 DataContextのは、リストには、列バインディングがオフに残っているようですね –

+0

をメインウィンドウに移動し、これに変更しました。 Binding = "{Binding server.IPAdress}"ではなく、Binding = "{Binding IPAdress}"に更新しましたか?また、バインディングの問題がある場合は、問題の診断に役立つ2つのことがあります。 1.ビジュアルスタジオの出力ウィンドウ(バインディングエラーが表示されます) 2. SnoopWPF https://snoopwpf.codeplexというツール.com /。バインディングエラーのあるWPF要素を強調表示できます。 コードを変更した場合(元のコードと同じように表示されます)、元の投稿を新しいコードで更新してください。あなたはDataContextを変更したようですね? – LukeW

関連する問題