2011-04-27 6 views
10

나는 이미이 질문을 받았지만 개발자가 제안한 거의 모든 것을 다 수행했다고 알고있다.WPF에서 Datagrid 바인딩

<DataGrid x:Name="Imported" VerticalAlignment="Top" DataContext="{Binding Source=list}" AutoGenerateColumns="False" CanUserResizeColumns="True"> 
    <DataGrid.Columns>     
     <DataGridTextColumn Header="ID" Binding="{Binding Path=ID}"/> 
     <DataGridTextColumn Header="Date" Binding="{Binding Path=Date}"/> 
    </DataGrid.Columns> 
</DataGrid> 

모달 대화 상자에 표시하고 모달 대화 상자의 생성자에서 라이센스 목록을 채우려고합니다. 그러나 여전히 데이터 릿 내부에 아무것도 채워지지 않습니다.

생성자 코드 :

public diagboxclass() 
{ 
    List<object> list = new List<object>(); 
    list = GetObjectList(); 
} 

public class object 
{ 
    string id; 
    DateTime date; 
    public string ID 
    { 
     get { return id; } 
     set { id = value; } 
    } 
    public DateTime Date 
    { 
     get { return date; } 
     set { date = value; } 
    } 
} 

너희들이 개체 목록 함께 할 수있는 뭔가를 생각합니까?

+0

내 목록 개체는 위에 바인딩되지 않은 두 개 이상의 다른 속성을 가지고 있습니다. 어떤 차이를 만들 수 있습니까? – alice7

+0

아마도 그렇지 않습니다. XAML을 더 많이 공유하면 ('list'정의 방법 포함) 더 도움이 될 수 있습니다. –

+0

상단에 코드를 추가했습니다. – alice7

답변

18

상기 개체 목록을 보지 않고도 DataContext이 아닌 DataGrid의 ItemsSource 속성에 바인딩해야한다고 생각합니다.

<DataGrid x:Name="Imported" VerticalAlignment="Top" ItemsSource="{Binding Source=list}" AutoGenerateColumns="False" CanUserResizeColumns="True"> 
    <DataGrid.Columns>     
     <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> 
     <DataGridTextColumn Header="Date" Binding="{Binding Date}"/> 
    </DataGrid.Columns> 
</DataGrid> 

(이 가정의 ItemsSource 의존 데이터 격자가 list 컬렉션을 포함하는 객체에 바인딩 DataContext에있다. 데이터 격자가 ItemsControl에서 유래 포함하는 소자 [UserControl을 등, 그 list, 당신은)

+0

그것은 itemssource에서도 잘 작동하지 않습니다. 시도했습니다. – alice7

+0

@ alice7 그런 다음 나머지 Window/UserControl/Grid가 포함 된 XAML을 게시하고'list '정의 방법을 알려주십시오. :) –

+0

전체 콘텐츠를 제거하고 방금 DataGrid.so를 벗어나 다른 컨트롤이 없습니다. 다음은 코드 isnide 생성자입니다. List objectList = new List (); objectList = GetObjectList(); – alice7

25

... DataGrid에에 모두 DataContext={Binding list}ItemsSource={Binding list}을 설정해야 할 수 있습니다 귀하의 컨트롤의 DataContext에 바인드되고있는 객체의 속성 사항이 아닌 경우 속성은, 그것은 따라서. 그것의 행을 결합 컬렉션을 정의 개체를 사용하지 마십시오. A A 클래스 이름 :

public class MyObject //better to choose a appropriate name 
{ 
    string id; 
    DateTime date; 
    public string ID 
    { 
     get { return id; } 
     set { id = value; } 
    } 
    public DateTime Date 
    { 
     get { return date; } 
     set { date = value; } 
    } 
} 

당신은이 클래스 물론 INotifyPropertyChanged를 구현해야합니다은 속성 세터에 문의하십시오. 그렇지 않으면 변경 내용이 귀하의 UI에 반영되지 않습니다.

Viewmodel 클래스/대화 상자 클래스는 MyObject 목록의Property이어야합니다. ObservableCollection<MyObject>이 갈 방법입니다에서

public ObservableCollection<MyObject> MyList 
{ 
    get... 
    set... 
} 

당신의 xaml 당신이 MyObject의 컬렉션에 Itemssource을 설정해야합니다. 합니다 (Datacontext은 대화 상자 클래스해야!)가 뒤에 코드

public diagboxclass() 
    { 
     List<object> list = new List<object>(); 
     list = GetObjectList(); 
     Imported.ItemsSource = null; 
     Imported.ItemsSource = list; 
    } 

에서이 작업을 수행하는

<DataGrid ItemsSource="{Binding Source=MyList}" AutoGenerateColumns="False"> 
    <DataGrid.Columns>     
    <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> 
    <DataGridTextColumn Header="Date" Binding="{Binding Date}"/> 
    </DataGrid.Columns> 
</DataGrid> 
+0

제 경우에는 DataGrid의 ItemSource가 다음과 같아야합니다 : ItemsSource = "{MyList 바인딩"} – RHAD

3

시도 또한 목록 효과적으로 채워 Blindmeis에서 언급 한 바와 같이, 단어를 사용하지 않습니다 확인 그것은 이미 C#에서 함수가 주어진다.