34

これは本当に奇妙なエラーです。私はWPFアプリケーションに取り組んでおり、MVVMに従っています。MainWindow でビューとビュー モデルを設定していますが、この奇妙なエラーが発生します。正常にビルドされ、アプリケーションは正常に実行されますが、なぜこのエラーが発生するのですか?

私も同様のことをいくつかフォローしましたが、適切な答えが見つかりませんでした。Visual Studio を再起動し、クリーンアップして再構築しようとしましたが、それでもこのエラーに直面します。

これがコードです。

<Window x:Class="MyProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:v="clr-namespace:MyProject.Views"
        xmlns:vm="clr-namespace:MyProject.ViewModels"
        xmlns:p="clr-namespace:MyProject.Properties"
        Title="{x:Static p:Resources.Title}" Height="400" Width="750" MinHeight="400" MinWidth="750">
    <Window.Resources>
        <DataTemplate DataType="{x:Type vm:MainPageViewModel}">
            <v:MainPageView/>
        </DataTemplate>
    </Window.Resources>

Error   1   The name "MainPageViewModel" does not exist in the namespace "clr-namespace:MyProject.ViewModels".

これが私のViewModelです

namespace MyProject.ViewModels
{
    public class MainPageViewModel : PropertyChangedBase
    {
        public MainPageViewModel()
        {
        }
    }
}

では、本当のエラーとは何でしょう。ちなみにVisual Studio 2012を使っています。

更新: 私のビューモデルとビューは同じプロジェクトにあります。私は他のプロジェクトを参照していません。そして MyProject.ViewModels.MainPageViewModel が存在します。

4

19 に答える 19

18

私も同じ問題を抱えていました。適切な名前空間と適切なクラス名があり、PATH も更新しました。最後に、XAML から "DataType" を取り出してコンパイルし、DataType を追加すると、機能しました。鶏が先か卵が先かの問題だったようです。XAML は、コンパイルされるまでそれを認識せず、DataType でコンパイルすることはできません。そのため、最初に MV を作成し、コンパイルします。次に、XAML に追加します。

于 2014-12-03T22:10:25.130 に答える
7

Visual Studio を閉じて再度開きます。

ここでいくつかの回答を試しました(ResharperでVS2012を使用しています)、すべて問題なく実行していましたが、まだエラーがありました。Resharper の「cntl」+クリックを使用してバインドされたフィールドに移動することもできましたが、それでも XAML コンパイル エラーが発生し、デザイナーはデザイン ビューを表示しませんでした。ビジュアルスタジオを閉じて再度開くと修正されました。

于 2014-07-07T18:00:31.150 に答える
5

このエラーは、xaml ファイルがビルドされていない名前空間を参照しているために発生します。

私の解決策[3つのステップで]:

1- 問題のあるファイルをコメントし、空のバージョンに置き換えます。たとえば、あなたの場合:

<!-- <Window ...> </Window> -->  <!--you orginal xaml code!, uncomment later-->

<Window                          <!-- temp xaml code, remove later -->
    x:Class="MyProject.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Window>

2-プロジェクト/ソリューションをクリーンアップして再構築します。

3-元の xaml コードのコメントを外し、一時的な xaml コードを削除します。

終わった。

于 2015-12-12T11:00:26.237 に答える
4

私も同じ問題を抱えていました。Intellisense を使用して名前空間マッピングを作成しましたが、アセンブリ属性が含まれていなかったため、次のようになりました。

xmlns:converters="clr-namespace:XYZ.UI.Converters;

別のウィンドウで動作する動作と比較すると、違いがわかりました。に変更したところ

xmlns:converters="clr-namespace:XYZ.UI.Converters;assembly=XYZ.UI"

それをきれいにして構築したところ、うまくいきました。

于 2014-12-07T11:30:33.497 に答える
2

私はマイクロソフトでこれを経験しました。要約すると、答えは、ビルド出力フォルダーを PATH に追加することです。

どうやら、Visual Studio のデザイナーは DLL とその依存関係を読み込みます。依存関係が見つからない場合、警告なしで失敗し、これらの種類のエラーが発生します。

私の場合、ビルド出力フォルダーを PATH に追加することは実際にはオプションではありません。これは、いくつかの異なる構成をビルドし、それらがすべて別のフォルダーに移動するためです。最後に、予期していなかった場所から DLL が取得されたために発生する奇妙な問題に遭遇する必要があります。

編集:申し訳ありません。急いで、PATH に追加するフォルダーは依存 DLL を含むフォルダーであることを指摘しておくべきでした。私の場合、これはビルド出力フォルダーですが、すべての場合に当てはまるとは限りません。

于 2013-10-10T14:29:42.043 に答える
2

None of the other answers solved the problem for me, but I eventually came up with an answer that did. In my case, this error only caused the designer to complain about invalid markup (i.e. everything worked fine at runtime).

I had used ReSharper8 to rename one of my classes being referenced in the XAML. This caused another completely different class reference in that same XAML to have this error. This was confusing because the class causing the problem was NOT the same as the referenced class displaying the error.

One of the other answers indicated that the error in question could be caused by renaming a project, and the only way to fix it was to remove and re-add that project. Similarly, I deleted and re-created the class file that I had renamed and the designer begin working again.

于 2015-01-01T21:29:26.677 に答える
1

このエラーが発生しました。問題は、参照しようとしていたアセンブリと同じ名前のクラスがプロジェクト内にあることでした。クラス名を変更したところ、うまくいきました。

于 2014-07-17T16:19:29.510 に答える
1

私はこれに遭遇し、このフォーラムに投稿された回答に基づいて作業するのに苦労しました. ある時点でプロジェクトの名前を変更し、自動生成された AssemblyInfo.cs ファイル (assembly: AssemblyTitle および assembly: AssemblyProduct フィールド内) にタイプミスを導入しました。驚いたことに、結果として得られたコンパイル エラーはこれだけでした。このエラーが発生し、以前の提案が機能しない場合は、再確認するのが少しわかりにくいものです。

于 2014-12-19T17:59:07.060 に答える
0

同じ問題があり、ViewModel にDEFAULT CONSTRUCTORを追加してソフトウェアをビルドすると (ctrl+Shift+B)、指定された名前空間で ViewModel が認識され始めました。

于 2019-08-09T15:16:34.843 に答える
0

クラスまたは参照しているものが見つからないことがよくあります。多くの場合、最善の解決策は、XAML で参照をコメント アウトし、ソリューションを再構築して再試行することです。常にうまくいきます。

于 2021-08-23T16:03:54.900 に答える
0

私の場合、IValueConverter の実装が問題でした

私は変わりました:

public object Convert(object value, 
  Type targetType, 
  object parameter, 
  string language) 
{ //code }

public object Convert(object value, 
  Type targetType, 
  object parameter, 
  System.Globalization.CultureInfo culture) 
{ //code } 

...プロジェクトを再構築する

于 2016-01-07T19:04:03.777 に答える