2010-05-18 5 views
0

C#에서 간단한 16 진수 편집기를 만들고 DataGrid의 각 셀을 사용하여 바이트 *를 표시하기로 결정했습니다. DataGrid는 목록을 가져와 각 개체를 행으로 표시하고 각 개체의 속성을 열로 표시합니다. 각 16 바이트 행을 표시하려면 16 문자열 속성 래퍼가 필요합니다. 할 수있는 동안, 그것은 가장 우아한 해결책이 아닙니다. 더 쉬운 방법이 있습니까? 이미 크기 16의 공용 문자열 배열 주위에 래퍼를 만들려고했지만 작동하지 않는 것 같습니다.WPF DataGrid 용 일부 문자열 주위에 래퍼 클래스를 만드는 가장 간단한 방법은 무엇입니까?

감사

이에 대한 이론적 근거는 내가 내 편집 한 파일을 저장할 때 그들 모두를 제거 할 필요없이 각 바이트 사이에 공백을 가질 수 있다는 것입니다 *

. 또한 행과 열에 레이블을 지정하는 것이 더 쉬워 진 것 같습니다.

답변

1

ColumnDefinitions 및 동적 RowDefinitions 콜렉션에 16 개의 열이있는 일반 그리드를 만들고 각 셀에 경계선이없는 TextBox을 배치하는 것이 좋습니다. 사용자가 텍스트 상자를 쉽게 탐색 할 수 있도록 일부 키 처리에 과부하가 필요하지만 DataGrid의 셀에도 이와 유사한 작업이 필요합니다.

그래도 DataGrid를 사용하려면 ItemsSource을 16 크기의 배열 목록으로 지정해야합니다. 코드에서 16 DataGridTextColumns을 만듭니다. 각 숫자는 Binding = new Binding(string.Format("[{0}]", i))이며, i은 0..15입니다. 인덱싱 속성은 다른 속성이므로 쉽게 바인딩 할 수 있습니다. 문자열 배열 일 필요는 없습니다. 바이트를 사용하고 16 진수 문자열과 바이트 사이에 IValueConverter를 만듭니다. 오, AutoGenerateColumns을 끕니다.

+0

규칙적인 그리드가 구현하기 쉽습니다. DataGrid 컨트롤을 알아 차렸을 때 비슷한 점을 생각해 보았습니다. – Joel

1

MultiBinding을 사용하는 것이 좋습니다.

 <my:DataGrid ItemsSource="{Binding HexDataArray}"> 
     <my:DataGrid.Columns> 
      <my:DataGridTemplateColumn> 
       <my:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock> 
          <TextBlock.Text> 
          <MultiBinding StringFormat="{}{0} {1} ..."> 
           <Binding Path="Array[0]" /> 
           <Binding Path="Array[1]" /> 
           ......................... 
          </MultiBinding> 
          </TextBlock.Text> 
         </TextBlock> 
        </DataTemplate> 
       </my:DataGridTemplateColumn.CellTemplate> 
      </my:DataGridTemplateColumn> 
     </my:DataGrid.Columns> 
    </my:DataGrid> 
관련 문제