Xamarin.FormとMVVMを使用して簡単なプロジェクトを開発したい。私のソリューション(XamarinPOCという名前)には、(標準のXamarin.Formsプロジェクトに加えて)モデル用の個別のプロジェクト(XamarinPOC.Model)とViewModelの個別のプロジェクト(XamarinPOC.ViewModel)があります。
XamarinPOC.ViewModelプロジェクトでBaseViewModelクラス(INotifyPropertyChangedインターフェイスを実装する)の抽象クラスを定義し、単純なプロパティでBaseViewModelクラスを拡張するSummaryViewModelクラスを作成した後:
namespace XamarinPOC.ViewModel
{
public class SummaryViewModel : BaseViewModel
{
private string _test = "The binding is OK!";
public String test
{
get
{
return _test;
}
set
{
_test = value;
OnPropertyChanged("test");
}
}
public SummaryViewModel(){}
}
}
次に、XamarinPOCプロジェクトで、ViewModelで定義されたテキストを表示するラベルのみを含む単純なContentPage(SummatyView)を作成しました。ビューとバインディングの定義にXAMLを使用したいのですが、アプリを実行しても何も表示されず、コンパイル時と実行時のエラーはありませんが、テキストは表示されません。私のXAMLはこれです
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XamarinPOC.ViewModel,Assembly=XamarinPOC.ViewModel"
x:Class="XamarinPOC.Summary"
Title="Summary List"
BindingContext="XamarinPOC.ViewModel.SummaryViewModel">
<StackLayout>
<Label Text="{Binding test}"/>
</StackLayout>
</ContentPage>
そして最後に私のapp.csは次のとおりです。
namespace XamarinPOC
{
public class App : Application
{
public App()
{
MainPage = new Summary();
}
}
}
XamarinPOCプロジェクトでは、XamarinPOC.ViewModelおよびXamarinPOC.Modelアセンブリへの参照を追加しました。
問題はバインディングのXAML定義にあると思いますが、エラーは見つかりません。私はどこが間違っていますか?
あなたのケースでビューをXamlからビューモデルにバインドするには、次のようにします
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
xmlns:viewModels="clr-namespace:XamarinPOC.ViewModel; Assembly=XamarinPOC.ViewModel"
x:Class="XamarinPOC.Summary"
Title="Summary List">
<ContentPage.BindingContext>
<viewModels:SummaryViewModel/>
</ContentPage.BindingContext>
<StackLayout>
<Label Text="{Binding test}"/>
</StackLayout>
</ContentPage>
私が気づいた1つの注意点は、命名規則に関するものです.1つのviewModelだけであっても、すべてのViewModelを「ViewModel s」という名前のフォルダ内に配置することをお勧めしますXamarinPOC.ViewModel -s