私のviewmodelのコレクションプロパティをGridViewにバインドする際にいくつかの問題があります。私はMVVMの光を使用していると私は正しくViewModelLocatorの設定を持っていると、ページのxamlでDataContextの設定を持っていると思います。問題バインディングGridview itemsourceをviewmodelプロパティ
モデル
public class Base
{
public ObservableCollection<Downloads> results { get; set; }
}
public class Downloads
{
public int id { get; set; }
public string name { get; set; }
public int trackNumber { get; set; }
public string mixName { get; set; }
public string title { get; set; }
public string slug { get; set; }
public string releaseDate { get; set; }
public string publishDate { get; set; }
public List<Artist> artists { get; set; }
public string artistNames
{
get
{
return (artists == null)
? string.Empty
: string.Join(", ", artists.Select(a => a.name));
}
}
public string artistNamesSlug
{
get
{
return (artists == null)
? string.Empty
: string.Join("_", artists.Select(a => a.name));
}
}
public Release release { get; set; }
public Label label { get; set; }
public Image images { get; set; }
public int downloadId { get; set; }
public string audioFormat { get; set; }
public string downloadUrl { get; set; }
}
public class Release
{
public int id { get; set; }
public string name { get; set; }
public string type { get; set; }
public string slug { get; set; }
}
public class Label
{
public int id { get; set; }
public string name { get; set; }
public string type { get; set; }
public string slug { get; set; }
public bool status { get; set; }
}
public class Image
{
public LargeImage large { get; set; }
}
public class LargeImage
{
public int id { get; set; }
public int width { get; set; }
public int height { get; set; }
public string url { get; set; }
public string secureUrl { get; set; }
}
のViewModel
public class AvailableViewModel : ViewModelBase
{
public AvailableViewModel()
{
}
private Base availableDownloads;
public Base AvailableDownloads
{
get
{
if(availableDownloads == null)
{
GetData();
}
return availableDownloads;
}
set
{
availableDownloads = value;
RaisePropertyChanged(() => AvailableDownloads);
}
}
private async void GetData()
{
OAuth oauth = new OAuth();
string httpMethod = "GET";
string parameters = "status=available";
string response = await oauth.GetData(OAuth.availDownloadsUrl, httpMethod, parameters);
Base availableDownloads = JsonConvert.DeserializeObject<Base>(response);
}
}
XAML
DataContext="{Binding Available, Source={StaticResource Locator}}">
<Page.Resources>
<DataTemplate x:Key="AvailableGridView">
<Grid Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Image Source="{Binding AvailableDownloads.images.large.url}" Grid.Column="0" />
<StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="20,0,0,0">
<TextBlock Text="{Binding AvailableDownloads.title}" Style="{StaticResource BaseTextBlockStyle}" TextWrapping="Wrap"/>
<TextBlock Text="{Binding AvailableDownloads.release.name}" Style="{StaticResource BaseTextBlockStyle}"/>
<TextBlock Text="{Binding AvailableDownloads.artistNames}" Style="{StaticResource SubtitleTextBlockStyle}"/>
</StackPanel>
</Grid>
</DataTemplate>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<GridView ItemsSource="{Binding AvailableDownloads.results}" SelectionMode="Multiple" ItemTemplate="{StaticResource AvailableGridView}"/>
</Grid>
これが問題の一部である可能性がありますが、私はXAMLでのDataContextを設定する際のレイアウトは、オブジェクトを表示します参照エラー。私はそれがなぜ起こるのか分かりませんが、アプリケーションはコンパイルされ実行されます。私はMVVMを初めて使っているので、なぜ私のバインディングがここで働いていないのか分かりません。