前提・実現したいこと
ViewModelで格納したデータをViewで表示したい
お世話になっております。
stringで宣言したNameメンバとintで宣言したAgeメンバを持つPersonクラスを
データとしてViewModelに持たせて、ListBoxにバインドさせているのですが、バインドさせたデータがViewに表示されません。
どうしたらViewに表示されるかご教授をお願い致します。
該当のソースコード
C#
1【ViewModel.cs】 2 3namespace ViewModel 4{ 5 public class ViewModel 6 { 7 public ObservableCollection<Person> people { get; private set; } 8 9 public ViewModel() 10 { 11 people = new ObservableCollection<Person>(Enumerable.Range(1, 100) 12 .Select(x => new Person 13 { 14 Name = "aaa" + x, 15 Age = (30 + x) % 50 16 })); 17 } 18 } 19 public class Person 20 { 21 public string Name 22 { 23 get; 24 set; 25 } 26 public int Age 27 { 28 get; 29 set; 30 } 31 } 32} 33
XAML
1<Window x:Class="Test.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:ViewModel" 7 xmlns:vm="clr-namespace:ViewModel" 8 mc:Ignorable="d" 9 Title="Test" Height="720" Width="960"> 10 11 <Window.DataContext> 12 <vm:ViewModel/> 13 </Window.DataContext> 14 15<Grid> 16 <Grid.RowDefinitions> 17 <RowDefinition Height="Auto" /> 18 <RowDefinition Height="Auto"/> 19 <RowDefinition Height="*"/> 20 <RowDefinition Height="*"/> 21 <RowDefinition Height="*"/> 22 <RowDefinition Height="*"/> 23 <RowDefinition Height="*"/> 24 <RowDefinition Height="*"/> 25 <RowDefinition Height="*"/> 26 <RowDefinition Height="*"/> 27 </Grid.RowDefinitions> 28 29 <Grid.ColumnDefinitions> 30 <ColumnDefinition Width="*"/> 31 <ColumnDefinition Width="6*"/> 32 </Grid.ColumnDefinitions> 33 34 <ScrollViewer Grid.Row="2" Grid.RowSpan="8" Grid.Column="1" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden"> 35 <ListBox 36 ItemsSource="{Binding people}"> 37 <ListBox.ItemTemplate> 38 <DataTemplate> 39 <StackPanel> 40 <TextBlock Text="{Binding people.Age}" /> 41 <TextBlock Text="{Binding people.Name}" /> 42 </StackPanel> 43 </DataTemplate> 44 </ListBox.ItemTemplate> 45 </ListBox> 46 </ScrollViewer> 47</Grid>
###問題点
画像のようにスクロールバーとListBoxは生成されるがTextが表示されない
試したこと
XAML
1・変更点のみ記載 2<DataGrid ItemsSource="{Binding people}" Grid.Row="2" Grid.RowSpan="8" Grid.Column="1"/> 3(ScrollViewerはコメントアウトされています)
ViewModelを解せず直接XAML.csにデータを持たせた→表示された
C#
1【MainWindow.xaml.cs】 2namespace Main 3{ 4 public partial class MainWindow : Window 5 { 6 public ObservableCollection<Person> people { get; private set; } 7 public MainWindow() 8 { 9 InitializeComponent(); 10 people = new ObservableCollection<Person>(Enumerable.Range(1, 100) 11 .Select(x => new Person 12 { 13 Name = "aaa" + x, 14 Age = (30 + x) % 50 15 })); 16 this.DataContext = people; 17 } 18 } 19}
XAML
1・前述のコードからの変更点のみ記載 2 3・ViewModelとの紐付けをコメントアウト 4 <!--<Window.DataContext> 5 <vm:ViewModel/> 6 </Window.DataContext>--> 7 8・Bindingの名前を変更 9 <ListBox 10 ItemsSource="{Binding }"> 11 <ListBox.ItemTemplate> 12 <DataTemplate> 13 <StackPanel> 14 <TextBlock Text="{Binding Age}" /> 15 <TextBlock Text="{Binding Name}" /> 16 </StackPanel> 17 </DataTemplate> 18 </ListBox.ItemTemplate> 19 </ListBox>
これをViewModelにデータを持たせた状態で実現させたいです
おそらくバインドのやり方が間違っている?と思うのですが正しいやり方が分かりません
どうが教えていただきますと幸いです。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/01 11:24