私はユーザーがアプリケーションを使用している間にオーディオファイルを再生するXamarin.Formsモバイルアプリケーションを構築しています。ユーザーはファイルの再生を開始した後も引き続きアプリケーションを使用することができ、ファイルは単一のビューではなく静的なクラスを使用して再生/管理されます(そのビューはナビゲーションスタックから削除される可能性がありますまだ演奏されている)。Xamarin - ControlTemplateの静的クラスへのバインド
私は、アプリケーション内の他のビューに表示されるミニプレーヤーを持ちたいと思います。これを達成するためにControlTemplateを使用しています。このコントロールテンプレートには、スタティッククラス内のプロパティ(プレーヤの状態[再生/一時停止]、残り時間、タイトルなど)にバインドされているアイテムや、静的クラスでメソッドを実行するコントロールを持たせたい。私はapp.xamlページ(ControlTemplateのある場所)のコードの背後にあるメソッドを使用してメソッドを実行できますが、バインド可能なプロパティをバインドするのは苦労しています。
今私は、IsToggledがバインド可能なプロパティにバインドされているはずのトグルを持っています。IsPlayingは静的クラスのバインド可能なプロパティにバインドされています。
私は下のエラーを取得し続ける:私は何が起こっているか分からないので、私はすべての私の.xamlでXMLNSで名前空間を定義している
Xamarin.Forms.Xaml.XamlParseException: Type AudioPlayer.Current not found in
xmlns clr-namespace:AudioPlayerBar;assembly=AudioPlayerBar...
。
<ControlTemplate x:Key="PlayerPageTemplate">
<StackLayout VerticalOptions="FillAndExpand">
<ContentView VerticalOptions="FillAndExpand">
<ContentPresenter />
</ContentView>
<StackLayout x:Name="stackFooterContent">
<Label Text="IsPlaying Value:"/>
<Switch IsToggled="{x:Static local:AudioPlayer.Current.IsPlaying}" />
<Button Text="Toggle IsPlaying" Clicked="Click_PlayPause" />
</StackLayout>
</StackLayout>
</ControlTemplate>
任意の考え
using System;
using System.ComponentModel;
using Xamarin.Forms;
namespace AudioPlayerBar
{
public class AudioPlayer :INotifyPropertyChanged
{
// Singleton for use throughout the app
public static AudioPlayer Current = new AudioPlayer();
//Don't allow creation of the class elsewhere in the app.
private AudioPlayer()
{
}
private bool _IsPlaying = false;
//property for whether a file is being played or not
public bool IsPlaying
{
get
{
return _IsPlaying;
}
set
{
_IsPlaying = value;
OnPropertyChanged("IsPlaying");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged == null)
return;
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
そして、ここでは(app.xaml内の)私のControlTemplateです:私のプロジェクト全体は、ここでhttps://github.com/ChetCromer/XamarinPrototypes/tree/master/AudioPlayerBar
でGitHubの上にある私の静的なクラスですか?私はXamarinの中で拘束するのは初めてだと認めますが、私が読んでいることは、ContentPagesにもっと応用しているようで、ControlTemplatesとは異なっているようです。
明確にするために、これは実際に静的なクラスではなく、静的なクラスのインスタンスです。静的クラスへのバインドも試しましたが、INotifyPropertyChangedを継承することができないため、移動する方法のようには見えません。 –