템플릿 기반 및 데이터 바인딩 된 Pivot에 PivotItem을 동적으로 추가하는 데 문제가 있습니다.데이터 바인딩 + 동적 피벗
사용중인 클래스 (빨리 이해할 수 있도록 단순화 된 비트);
class Menu {
string Name
List<Dish> Dishes_1;
List<Dish> Dishes_2;
List<Dish> Dishes_3;
}
class Dish {
string Description
string Price;
}
메뉴 개체 목록을 표시하려면 피벗을 사용하고 싶습니다. 해당 목록의 항목 수를 기반으로 PivotItem을 동적으로 만듭니다. 따라서 각 PivotElement는 동일한 레이아웃을 따르고 동일하게 동작해야합니다. 레이아웃 템플릿과 데이터 바인딩은 .xaml에서 다음과 같이 수행됩니다.
<phone:Pivot x:Name="Mainpivot">
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</phone:Pivot.HeaderTemplate>
<phone:Pivot.ItemTemplate>
<DataTemplate>
<ListBox>
<TextBlock Text="Dishes_1"/>
<ListBox ItemsSource="{Binding Dishes_1}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Description}"/>
<TextBlock Text="{Binding Price}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
// ...
// this is repeated 3 times;
//a textblock and listbox per List<Dishes> in the Menu-class
</ListBox>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
나는 다음과 같이 드 .cs 파일의 피벗을 채울 : 나는 메뉴 객체로의 DataContext를 설정으로
foreach (Menu m in List_Menus) {
PivotItem p = new PivotItem();
p.DataContext = m;
Mainpivot.Items.Add(p);
}
이 (XAML을 통해) 데이터 바인딩이 더 이상 코드를 필요가 없습니다 여기 (그래서 나는 생각하니?).
지금 문제가 있습니다. 작동하지 않습니다 ...
디버거를 살펴볼 때 생성 된 PivotItem은 Mainpivot에서 정의한 템플릿처럼 작동하지 않습니다 (또는 생각합니다). Mainpivot을 보면 PivotItems가 추가되었다는 것을 보여 주지만, 그게 전부입니다. 그들은 null PivotItems 만 비어있는 것 같습니다. 에뮬레이터에서 실행할 때 빈 Pivot을 보여줍니다.
의견이 있으십니까?
// PS : 초보자를 개념으로 생각하면 ViewModels를 사용하지 않습니다. 나는 그 문제와 관련이 있다고 생각하지 않는다.
foreach 루프 대신 ItemsSource를 변경하면 작업을 수행했습니다. 감사합니다! 클래스는 이미 입력 한 것과 정확히 같았지만 읽는 것이 더 쉽다고 생각되는 정보는 생략되었습니다. 고맙습니다! MVVM 모델에 관해서는; 그것은 분명히 내가 들어갈 수있는 일이지만 초보자로서 먼저 일하는 것을 얻은 다음 작업 기반을 얻은 후에는 필요한 곳을 개선하는 것이 더 즐겁다 고 느낍니다. –