質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

Q&A

1回答

3374閲覧

ListViewにネストしたGridViewのDataContextが認識されずエラーになる

yh-0506

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

0グッド

0クリップ

投稿2021/09/10 03:26

前提・実現したいこと

.NET Framework 4.8で開発していたwindowsアプリケーションを.NET5.0で移植している際にXAMLエラーは発生してしまい解決できずに困っています。
エラーの詳細はXDG0012 XAMLで、ListViewにネストしたGridViewのDataContextが認識されずうまく参照されないというものでデザイナーなどが表示されません。
できていた物ができなくなりました。
このエラーを解消したいです。よろしくお願いします。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

XDG0012 メンバー”DataContext”が認識されないか、アクセスできません。

該当のソースコード

UserControl1.xaml

<UserControl x:Class="Sample.ControlPanel.Gui.Views.Controls.UserControl1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Sample.ControlPanel.Gui.Views.Controls" xmlns:models="clr-namespace:Sample.ControlPanel.Gui.Models" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> <Grid> <ListView ItemsSource="{Binding SampleCollection}"> <ListView.Resources> <GridView x:Key="ImageServerEditView" d:DataContext="{d:DesignInstance {x:Type models:Sample}}"/> </ListView.Resources> </ListView> </Grid> </UserControl>

sampleViewModel.cs

public class sampleViewModel { SampleCollection = new ObservableCollection<Sample> { new Sample() { Id = 1 }, new Sample() { Id = 2 }, }; } public ObservableCollection<Sample> SampleCollection { get; }

sample.cs

public class Sample : BindableBase { private int _channelId; public Sample() { } public int ChannelId { get => _channelId; set => SetProperty(ref _channelId, value); } }

試したこと

・DataGridにSample.csを参照させるこはできた。(アクセスレベルの話ではなかった)

補足情報(FW/ツールのバージョンなど)

移植元
C#
Prism+Reactiveproperty
対象フレームワーク:.NET Framework 4.8

移植先
C#
Prism+Reactiveproperty
対象フレームワーク:.NET5.0

※足りない情報があれば教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

sampleViewModelがコンパイルできません。
省略時に間違えたということは理解していますが、こういうことがあると回答者はほかにも間違いがあるんじゃないかと疑心暗鬼になります。

余計な情報を伏せたいなら、実際にSampleソリューションを作って動作確認したうえでそのままコピペしてください。
回答者も実際に作って確認しています。当事者がそこを手抜きしないでください。


エラーの詳細はXDG0012 XAMLで、ListViewにネストしたGridViewのDataContextが認識されずうまく参照されないというものでデザイナーなどが表示されません。
できていた物ができなくなりました。

UserControl1.xamlは本当にこの内容なんですか?それで4.8では表示されていた!?
こちらの手元(Visual Studio Community 2019 Version 16.11.2)では、どちらも同じエラーになります(dは無視されるのでビルドはできます)

GridViewクラスにDataContextプロパティはありません。
なのでd:DataContextが失敗するのは当然に思えます(dの詳しい仕組みは知りませんが^^;
GridView クラス (System.Windows.Controls) | Microsoft Docs

デザイナの実装が新しくなったそうなので、古いデザイナでは「不正な設定は無視されていた」とかはあるかもしれません(私は確認できませんが)

やるんだったらUserControl1d:DataContextSampleViewModelを設定するか、d:SampleDataはどうでしょうか。
Visual Studio の XAML デザイナーでデザイン時のサンプル データを使用する - Visual Studio (Windows) | Microsoft Docs

xml

1<UserControl 2 x:Class="Questions358740.Views.SampleView" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 6 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 7 xmlns:models="clr-namespace:Questions358740.Models" 8 xmlns:viewmodels="clr-namespace:Questions358740.ViewModels" 9 d:DataContext="{d:DesignInstance viewmodels:SampleViewModel, IsDesignTimeCreatable=True}" 10 mc:Ignorable="d"> 11 <StackPanel> 12 <ListView ItemsSource="{Binding SampleCollection}"> 13 <!--<ListView.Resources> 14 <GridView x:Key="ImageServerEditView" d:DataContext="{d:DesignInstance {x:Type models:SampleModel}}" /> 15 </ListView.Resources>--> 16 <ListView.View> 17 <GridView> 18 <GridViewColumn DisplayMemberBinding="{Binding ChannelId}" Header="ChannelId" /> 19 </GridView> 20 </ListView.View> 21 </ListView> 22 23 <ListView d:ItemsSource="{d:SampleData}" ItemsSource="{Binding SampleCollection}"> 24 <ListView.View> 25 <GridView> 26 <GridViewColumn DisplayMemberBinding="{Binding ChannelId}" Header="ChannelId" /> 27 </GridView> 28 </ListView.View> 29 </ListView> 30 </StackPanel> 31</UserControl>

cs

1using Prism.Mvvm; 2using Questions358740.Models; 3using System.Collections.ObjectModel; 4 5namespace Questions358740.ViewModels 6{ 7 public class SampleViewModel : BindableBase 8 { 9 public ObservableCollection<SampleModel> SampleCollection { get; } = new() 10 { 11 new() { ChannelId = 1, }, 12 new() { ChannelId = 2, }, 13 }; 14 } 15}

cs

1using Prism.Mvvm; 2 3namespace Questions358740.Models 4{ 5 public class SampleModel : BindableBase 6 { 7 public int ChannelId { get => _channelId; set => SetProperty(ref _channelId, value); } 8 private int _channelId; 9 } 10}

Visual Studio デザイナ

投稿2021/09/10 08:53

編集2023/07/29 04:45
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問