2014-09-10 2 views
0

나는대로 만들 그리드의 WPF 목록 상자는 다음이 다음과 같이WPB리스트 박스는 클래스 내에서 제어하기 위해 결합

나는 단순한 선언으로 XAML에서 목록 상자를 정의

코드에서
<ListBox Name="MyListbox" > 
</ListBox> 

, 동적으로 임의의 수의 Grid 항목 (System.Windows.Controls.Grid)을 만들고이를 ListBox에 추가합니다. 다음과 같음 :

foreach (MyDataType myItem in MyDataList) 
{ 
    Grid newGrid = new Grid(); 
    // Code that sets the properties and values of the grid, based on myItem 

    MyListbox.Items.Add(newGrid); 
} 

위대한 작품이며 모든 것이 내가 원하는 방식으로 보입니다.

이제 ListBox에서 실제 myItem 개체에 대한 참조를 저장하여 나중에 참조 할 수 있도록 결정했습니다. 바로 표시 그리드를 표시하는 지금, 물론

foreach (MyDataType myItem in MyDataList) 
{ 
    Grid newGrid = new Grid(); 
    // Code that sets the properties and values of the grid, based on myItem 

    MyListbox.Items.Add(new ListGridItemNode(myItem,newGrid)); 
} 

내 목록 상자를 대신 :

public class ListGridItemNode 
{ 
    public MyDataType theItem; 
    public Grid theGrid; 
    public ListGridItemNode(MyDataType inItem, Grid inGrid) 
    { 
     theItem = inItem; 
     theGrid = inGrid; 
    } 
} 

그리고 다음에 코드를 변경 :

내 생각과 같은 새로운 클래스를 만드는 것이 었습니다 텍스트 "MyApp.ListGridItemNode".

내 질문은 : ListBox에 레벨을 더 깊게 표시하고 각 ListGridItemNode 객체의 실제 그리드를 표시하려면 어떻게합니까?

이것이 바인딩과 관련이 있다고 생각하지만, 내가하는 것처럼 작동하는 예제는 찾을 수 없습니다. 내가 찾던 대부분의 것은 객체 전체의 문자열이 아니라 전체 컨트롤에 바인딩하는 것을 보여줍니다.

+0

이 * 이것은 * 할 수 없습니다 것입니다 당신이 문서를 찾을 수없는 이유. 항목 템플릿을 사용하여 데이터가 표시되는 방법 *을 결정하는 데이터에 바인딩되는 컨트롤을 만듭니다. 당신은 동적으로 아이템 컨트롤에 추가해서는 안됩니다. – BradleyDotNET

+0

코드에 UI 요소를 만들지 마십시오. 대신 ListBox 항목에 적절한 DataTemplate을 만듭니다. MSDN의 [데이터 템플릿 개요] (http://msdn.microsoft.com/en-us/library/ms742521.aspx) 문서를 살펴보십시오. – Clemens

+0

실제로 이것은 이상합니다. 다른 방법으로는 (격자의 목록 상자) 이해할 수 있습니다. 그리드 위에 파란색 초점을 어떻게 다룰 예정입니까? 그리드 모음이 필요한 경우 ItemsControl 또는 StackPanel 안에 래핑하십시오. – Aybe

답변

1

Grid 객체의 Tag 속성을 사용할 수 없습니까?

newGrid.Tag = myItem; 

그리고 나중에 :

Grid grid; // obtain Grid object somehow 
MyItem myItem = (MyItem) grid.Tag; 
+0

그건 훌륭한 대안이고, 저에게 도움이되었습니다. 며칠 내에 다른 누구도 내 아이디어에 대한 해결책을 찾지 못하면이 것을 받아 들일 것입니다. – JoeMjr2

관련 문제