나는 내 데이터의 모양에 대해 원하는대로 작동하는 5 X 4 격자 (아래 코드)를 가지고 있습니다. 최근에 View Model에서 그리드를 View로 전달하고이를 XAML의 다른 그리드에 바인딩하고 MVVM 패턴을 유지하는 것이 사실상 불가능하다는 것을 발견했습니다. 이것이 바로 내 목표입니다.MVVM 패턴에서 사용하기 위해 격자 내용을 ListView 또는 기타로 변환
내 프레젠테이션에서 각 어린이가 하나의 이미지, 하나의 이미지 및 두 개의 텍스트 블록 UI 요소가있는 단일 셀로 그룹화해야한다는 점이 문제입니다.
DataTable, DataSet, GridView, List 등 모든 요소는 표시 할 개별 행/열 셀에 여러 자식 요소를 추가 할 수 없습니다. 불행히도 단순히 열 머리글에 이미지를 고집하는 것이 아닙니다.
다른 유사한 옵션을 발견 한 사람이 있습니까?
감사합니다,
글렌
다음은 샘플 그리드 및 결과보기의 이미지입니다.
public void FormatGridCell()
{
Random random = new Random();
List<int> randomNumList = new List<int>();
for (int i = 0; i < 50; i++)
randomNumList.Add(random.Next(50));
List<string> columHeader = new List<string>();
columHeader.Add("Pitts");
columHeader.Add("Vans");
columHeader.Add("Lancair");
columHeader.Add("Epic");
List<string> rowHeader = new List<string>();
rowHeader.Add("NORTH");
rowHeader.Add("SOUTH");
rowHeader.Add("EAST");
rowHeader.Add("WEST");
rowHeader.Add("CANADA");
for (int x = 1; x < 5; x++)
{
var engineType= new TextBlock { Text = columHeader[x - 1] };
engineType.SetValue(Grid.RowProperty, 0);
engineType.SetValue(Grid.ColumnProperty, x);
engineType.HorizontalAlignment = HorizontalAlignment.Center;
this.airplaneGrid.Children.Add(engineType);
for (int r = 1; r < 6; r++)
{
var dealerService = new TextBlock { Text = rowHeader[r - 1] };
dealerService.SetValue(Grid.RowProperty, r);
dealerService.SetValue(Grid.ColumnProperty, 0);
dealerService.HorizontalAlignment = HorizontalAlignment.Center;
this.airplaneGrid.Children.Add(dealerService);
for (int i = 1; i < 6; i++)
{
// Bitmap path will be based on Type
var modelImage = new Image { Width = 20, Height = 20 };
var bitmapImage = new BitmapImage(new Uri(@"c:\personal\temp\dog.jpg"));
modelImage.Source = bitmapImage;
modelImage.SetValue(Grid.RowProperty, r);
modelImage.SetValue(Grid.ColumnProperty, i);
modelImage.HorizontalAlignment = HorizontalAlignment.Left;
modelImage.VerticalAlignment = VerticalAlignment.Top;
var mfgName = new TextBlock { Text = "Lancair IV" };
mfgName.SetValue(Grid.RowProperty, r);
mfgName.SetValue(Grid.ColumnProperty, i);
mfgName.HorizontalAlignment = HorizontalAlignment.Center;
var price = new TextBlock { Text = "$" + randomNumList[r + i] };
price.SetValue(Grid.RowProperty, r);
price.SetValue(Grid.ColumnProperty, i);
price.HorizontalAlignment = HorizontalAlignment.Left;
price.VerticalAlignment = VerticalAlignment.Center;
price.Margin = new Thickness(30, 0, 0, 0);
this.airplaneGrid.Children.Add(modelImage);
this.airplaneGrid.Children.Add(mfgName);
this.airplaneGrid.Children.Add(price);
}
}
}
}
이 기능은 제 것이 아닙니다. 죄송합니다, 명명 된 신용을 잊어 버렸지 만,이 포럼에 제공되는 동료 stackoverflow 채팅.
public static class RandomExtensions
{
public static int NextDouble(
Random random,
double minValue,
double maxValue)
{
return random.Next(10, 50);
}
}
죄송합니다. 이미지를 제출하려면 토템 폴이 너무 작지만 의도 한 레이아웃을 완전히 이해하려면 실행하십시오.
여기에 위의 내용을 지원하는 XAML이 있습니다.
<Grid x:Name="airplaneGrid" ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="60" />
<RowDefinition Height="60"/>
<RowDefinition Height="60"/>
<RowDefinition Height="60"/>
<RowDefinition Height="60"/>
<RowDefinition Height="60"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="175"/>
<ColumnDefinition Width="175"/>
<ColumnDefinition Width="175"/>
<ColumnDefinition Width="175"/>
<ColumnDefinition Width="175"/>
</Grid.ColumnDefinitions>
</Grid>
'내가 최근에 발견 한 것은 사실상 불가능합니다. '- 필요한 화면을 게시하십시오. 임 꽤 확신 할 수있는 방법은 청결과 분리 MVVM을 유지하면서 그것을 할 수 있습니다. –
HighCore - 감사합니다. 10 개 이하 게시물이므로 첨부 및 이미지 작업을 수행 할 수 없습니다. XAML에 위의 태그를 추가하면 – user2284452
결과를 알 수 없습니다. 왜 각 열에 대해 사용자 정의 CellTemplate과 함께 ListView를 사용하지 않습니까? –