문제

나는 단 1 줄의 그리드가 있습니다. 그리드의 데이터 컨텍스트에 의해 열량을 결정하고 싶습니다.

예를 들어, "fred", "joe"및 "anne"을 반환하는 '이름'이라는 관측형 수집 속성에 노출 된 이름 목록이있는 경우, 각각에 텍스트 상자가 각각에 바인딩 된 3 개의 열을 원합니다. 이름.

지금까지 내 생각 :

1) 코드 베어드에 손으로 그리드를 구축하고 관측형 수집이 변경 될 때 재 구축하십시오. 나는 그것이 일을하는 WPF 방식이 아니라 약간 어리석은 것처럼 보였기 때문에 이것과 함께 가지 않았다.

2) 그리드의 칼럼 정의 속성과 바인딩을 만듭니다. 이것은 더 정확해 보였지만 ColumnDefinition의 그리드에는 종속성 속성이 없습니다.

도움이 되었습니까?

해결책

나는 그리드를 즉석에서 수정하는 것이 가장 좋은 방법이라고 생각하지 않습니다. 다음은 또 다른 해결책입니다. ListBox를 사용할 수 있지만 교체 할 수 있습니다 Itemspanel 당신이 선택한 다른 패널과 함께. Listbox의 기본 Itemspanel은 방향이 세로로 설정된 VirtualizingStackPanel입니다. 항목이 수평으로 표시되기를 원하므로 가상화 스택 패널로 방향으로 설정된 방향으로 교체 할 수 있습니다. 수평의. 물론, ite ited stemplate 또는 다른 것을 수정할 수 있습니다.

<ListBox ItemsSource="{Binding MyCollection}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

또한이 메소드를 사용하여 항목을 가로로 표시하는 ListBox를 만들기 전에 사용했지만 Wrappanel을 사용하여 라인의 공간이 부족할 때 다음 줄로 랩핑했습니다. 자신만의 커스텀 패널을 만들어 대체 할 수도 있습니다. 한 번은 항목을 무작위로 배치 한 패널을 만들어서 ListBox에 사용했습니다. 내 바운드 컬렉션의 각 항목은 Listbox 내에서 임의의 위치에 표시되었습니다. 레이아웃이 새로 고침 될 때마다 항목이 새로운 위치를 차지했습니다.

다른 팁

그것이 a Datagrid,, AutogenerateColumns 재산은 이것을 할 것입니다. 사용함으로써 DatagridTemplateColumn, 텍스트 대신 텍스트 상자 컨트롤을 넣을 수 있습니다. 첨부 된 이벤트를 제공해야합니다 자가 생성 콜럼 그리고 자가 생성 콜러네 투어 (HI, Microsoft, 이것은 Carpel Tunnel Calling입니다), 열 속성을 텍스트 상자와 함께 템플릿 열로 설정합니다.

나는 당신의 관측형 수집 방식이 더 간단하다고 말하고 싶습니다; -p.

각 열이 아닌 각 행에 이름을 허용 할 수있는 경우 GridView보기 속성과 함께 ListView를 사용해야하며 바인딩 텍스트 상자 인 사용자 정의 셀 테템 플레이트를 사용해야합니다. 이 같은:

<ListView ItemsSource="{Binding Names}">
  <ListView.View>
    <GridView>
      <GridViewColumn>
        <GridViewColumn.CellTemplate>
          <!-- Your textbox goes in a DataTemplate here -->             
        </GridViewColumn.CellTemplate>
      </GridViewColumn>
    </GridView>
  </ListView.View>
</ListView>

솔루션 #2는 불행히도 XAML에서는 불가능합니다. 솔루션 #1은 자체 열에 각 이름이 있어야하는 경우 가장 좋은 방법입니다.

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