私はFreshMVVMフレームワークを使用したXamarinアプリケーションを実装していますが、BasePageを使用してPages間でコードを共有したいと考えています。 問題は、MainPage.xamlのいくつかのプロパティをバインドする必要がある場合、ソースをこのように指定して動作させる必要があることです。Text = "{バインディングタイトル、ソース= {x:参照メインページ}} "。そうでない場合ソースバインディングが機能しません。 さて、私はそれを得るが、これは正しい方法ですか?同じ結果を達成する別の方法はありますか?ページにたくさんのバインディングがあるとどうなりますか?例えば、私の意見では、各バインディングの同じソースを設定するのは非常に面倒なので、ソースを上位レベルに設定することは可能ですか?Xamarinフォームのベースページとのバインド
BasePage.xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TestXamarin.BasePage"
x:Name="basePage">
<ContentView>
<StackLayout Orientation="Vertical">
<Label Text="HEADER" FontSize="Large"/>
<Label Text="{Binding Text, Source={x:Reference basePage}}" FontSize="Large"/>
<ContentPresenter BindingContext="{Binding Parent.BindingContext}"
Content="{Binding PageContent, Source={x:Reference basePage}}" />
</StackLayout>
</ContentView>
</ContentPage>
BasePage.xaml.cs
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace TestXamarin
{
\t [XamlCompilation(XamlCompilationOptions.Compile)]
\t public partial class BasePage : ContentPage
\t {
\t \t public static readonly BindableProperty TextProperty = BindableProperty.Create(
\t \t \t nameof(Text),
\t \t \t typeof(string),
\t \t \t typeof(BasePage));
\t \t public string Text
\t \t {
\t \t \t get { return (string)GetValue(TextProperty); }
\t \t \t set { SetValue(TextProperty, value); }
\t \t }
\t \t public static readonly BindableProperty PageContentProperty = BindableProperty.Create(
\t \t \t nameof(PageContent),
\t \t \t typeof(object),
\t \t \t typeof(BasePage));
\t \t public object PageContent
\t \t {
\t \t \t \t get { return GetValue(PageContentProperty); }
\t \t \t \t set { SetValue(PageContentProperty, value); }
\t \t }
\t \t public BasePage()
\t \t {
\t \t \t InitializeComponent();
\t \t }
\t }
}
MainPage.xamlを
<local:BasePage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TestXamarin"
x:Class="TestXamarin.MainPage"
Text="FROM MAIN PAGE"
x:Name="mainPage">
<local:BasePage.PageContent>
<StackLayout>
<Label Text="Body" FontSize="Large"/>
<Label Text="{Binding Title, Source={x:Reference mainPage}}" FontSize="Large"/>
</StackLayout>
</local:BasePage.PageContent>
</local:BasePage>
MainPage.xaml.cs
public partial class MainPage : BasePage
\t {
\t \t public MainPage()
\t \t {
\t \t \t Title = "MAIN PAGE";
\t \t \t InitializeComponent();
\t \t }
\t }
MVVMフレームワークを使用していますか?そうでなければ、私はあなたの拘束力のある経験を大幅に簡素化できるので、あなたにそれを調べるようアドバイスします。 –
'BindingContext'だけが' Source'ではなく、プロパティ値の継承をサポートしています – Ada
@StevenThewissen実際に私はFreshMVVMを使用していますが、同じ問題があるようです。 – user2297037