각 ListBoxItem TextBlocks에 표시되는 방법 다른 테이블의 filelds에 바인딩하는 방법

StackOverflow https://stackoverflow.com/questions/1816533

  •  08-07-2019
  •  | 
  •  

문제

모든 사람에게 인사하고 내 영어에 대해 죄송합니다! ListBox가 있습니다. ItemsSource = MyClientsList.DefaultView입니다. ListBox의 항목에는 별도의 리소스 파일로 정의 된 템플릿 (ControlTemplate)이 있습니다. 모든 항목에는 작은 텍스트 블록이 포함되어 있으며, 각각의 텍스트는 내 객체 MyClientsList의 필드에 바인딩됩니다.

이 항목 템플릿을 추가해야하며 TexBlock이 더 많아야하며 각각은 다른 클래스 MyordersList의 필드에 바인딩해야합니다. - (따라서 데이터베이스의 다른 테이블에서 각 Listbox 정보 라인을보고 싶습니다. 이것은 질문입니다).

Listbox의 Itemsource에는 MyClientsList를 반대 할 수있는 링크가 있으며 동일한 ListBox의 ItemSource로 MyOrderList를 설정할 수 없습니다. 따라서 ControlTemplate 내부에서 TextBlock.datacontext wich를 지정하는 방법을 찾 거나이 문제를 다른 방식으로 해결할 수있는 방법을 찾아야합니까?

추신 : 저는 .NET과 WPF의 새로운 것이고 아마도 내 설명에 실수가있을 것입니다. 죄송합니다.

도움이 되었습니까?

해결책

DataGrid 유형의 디스플레이가있는 것처럼 들리고 주어진 클라이언트의 주문 정보를 표시하기 위해 더 많은 열을 추가하려고합니다. 이것이 사실이라면, 당신은 몇 가지 일을해야 할 것입니다. 먼저, 두 엔티티의 정보를 단일 객체에 저장하는 복합 객체를 만들어야합니다 (따라서 컨트롤의 각 행에는 표시해야 할 모든 데이터가 있습니다). 둘째, 실제 Datagrid 컨트롤을 사용하여 ListBoxItem을 템플릿하는 대신 행을 표시하는 것이 좋습니다. 프레임 워크에 내장 된 GridView가있는 ListView는 크지 않으므로 wpftoolkit의 Datagrid 무료 옵션.

다른 팁

질문을 이해 한 경우에는 두 가지 문제가 있습니다. 클라이언트와 주문이 모두 포함 된 단일 컬렉션을 어떻게 만들고 동일한 Listbox 내에서 다른 방식으로 클라이언트와 주문을 어떻게 표시합니까?

첫 번째와 관련하여 CompositeCollection을 사용하여이를 수행 할 수 있습니다.

두 번째와 관련하여, 제어 회원 대신 두 개의 데이터 emplates를 정의하십시오. 각 DataTemplate의 키로 표시되는 객체의 유형을 사용하십시오.

<DataTemplate x:Key="{x:Type local:Client}">

또는 항목 유형에 따라 다른 데이터 emplates를 명시 적으로 가리키기 위해 itemscontrol.itemplateselector를 사용하십시오. OT OT 컨트롤 템플릿을 사용해야하는 경우 itemscontrol.itemcontainerstyleselector를 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top