在庫管理のウィザードUIを作成したいと考えています。 XAMLで該当する行は次のとおりです。「X」という名前のリソースが見つかりません。どうしてですか?
<ContentPresenter Content="{Binding Current}" ContentTemplateSelector="{StaticResource inventorySelector}"/>
"現在"、現在アクティブなビューモデル、AvailableInventoriesViewModel、GroupsViewModel、NewArticlesViewModel、ResultViewModelの一つです。
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using Centron.WPF.WarehousingExtension.InventoryModule.ViewModels.WizardViewModels;
namespace Centron.WPF.WarehousingExtension.InventoryModule.UI.DataTemplateSelectors
{
public class InventoryDatatemplateSelector : DataTemplateSelector
{
public DataTemplate AvailableDatatype { get; set; }
public DataTemplate GroupsDatatype { get; set; }
public DataTemplate NewDatatype { get; set; }
public DataTemplate ResultDatatype { get; set; }
public InventoryDatatemplateSelector()
{
Debug.WriteLine("");
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item is AvailableInventoriesViewModel)
return AvailableDatatype;
else if (item is GroupsViewModel)
return GroupsDatatype;
else if (item is NewArticlesViewModel)
return NewDatatype;
else return ResultDatatype;
}
}
}
その後、私はDataTemplatesのインスタンスと、このようなセレクタの作成:
<base:InventoryViewBase.Resources>
<DataTemplate DataType="viewModels:AvailableInventoriesViewModel" x:Key="availableInventoriesDatatype">
<controls:AvailableInventoriesView />
</DataTemplate>
<DataTemplate DataType="viewModels:GroupsViewModel" x:Key="groupsDatatype">
<controls:GroupsView />
</DataTemplate>
<DataTemplate DataType="viewModels:NewArticlesViewModel" x:Key="newArticlesDatatype">
<controls:NewArticlesView />
</DataTemplate>
<DataTemplate DataType="viewModels:ResultViewModel" x:Key="resultDatatype">
<controls:ResultView/>
</DataTemplate>
<selector:InventoryDatatemplateSelector
x:Key="inventorySelector"
AvailableDatatype="{StaticResource availableInventoriesDatatype}"
GroupsDatatype="{StaticResource groupsDatatype}"
NewDatatype="{StaticResource newArticlesDatatype}"
ResultDatatype="{StaticResource resultDatatype}"/>
</base:InventoryViewBase.Resources>
私は私のInventoryDatatemplateSelectorのコンストラクタにブレークポイントを設定し、ステップ実行することができますが、私はそのように定義しているDataTemplateSelectorそれは次のデバッグステップで明らかにセレクタインスタンスの最初のプロパティを設定しようとすると、すぐに内部例外を持つ例外が発生します。
Cannot find resource named \"availableInventoriesDatatype\". Resource names are case sensitive.
どうしたのですか?明確に定義されているリソースが見つからないのはなぜですか?
この問題を引き起こしたことがわからないことがいくつかあります。最初に、xamlは上から下に解析され(非常に例外を除いて)、オブジェクトグラフに変換されます。つまり、**注文は重要です**。第2に、DataTemplateは、(基本的に)x:Keyプロパティに取って代わる「DataType」に基づいてKeyを割り当てるように設計されています。したがって、DataTemplate(それを使用するにまったく必要ない)とx:Keyの両方を持つDataTemplateを定義する場合は、まずx:Keyを配置する必要があります。 DTを使いやすくした結果、混乱しました。 – Will