Один из используемых мной пакетов NuGet имеет следующие bindable property
доступные:
VideoStateType VideoState { get; } // The current state of the VideoView: Empty, Error, Buffering, Playing, Paused, Stopped
Является ли фрагмент кода ниже правильной реализации "получения" VideoStateType
?Я нашел темы, касающиеся свойств только для чтения, но ничего не связано с VideoStateTypes.Я думал, что console.WriteLine
поможет мне узнать, но он не отображается в моей консоли.
Правильно ли оно реализовано?
private VideoStateType videoState;
public VideoStateType VideoState
{
get
{
Console.WriteLine("The VideoState is ", videoState);
return videoState;
}
}
Ниже приведен мой полный код, если вам интересно.По сути, у меня есть рабочее свойство isBusy
, которое можно переключить false/true
, если я захочу.Но я пытаюсь переключать isBusy = true
только во время buffering
VideoState.
ОБНОВЛЕНИЕ: 5/20: isBusy изменено на IsBusy в "private void Videoplayer_PropertyChanged"
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System;
using System.ComponentModel;
using System.Windows.Input;
using Xamarin.Forms;
using Rox;
namespace PreAppStructure
{
public class RoxViewModel : INotifyPropertyChanged
{
public RoxViewModel()
{
}
// using "isBusy" binding.
// isBusy be manually toggled with: bool isBusy = true/false;
bool isBusy;
public event PropertyChangedEventHandler PropertyChanged;
public bool IsBusy
{
get { return isBusy; }
set
{
isBusy = value;
OnPropertyChanged(nameof(IsBusy));
}
}
// Attempting to get the "Video State" using the Read-Only Property
private VideoStateType videoState;
public VideoStateType VideoState
{
get
{
Console.WriteLine("The VideoState is ", videoState);
return videoState;
}
}
// Attempting to use the "Video State" in an if/else statement
private void Videoplayer_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (videoState == VideoStateType.Buffering)
{
IsBusy = true; // EDIT: isBusy changed to IsBusy
}
else
{
IsBusy = false; // EDIT: isBusy changed to IsBusy
}
}
//Property Changes
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventArgs eventArgs = new PropertyChangedEventArgs(propertyName);
PropertyChanged?.Invoke(this, eventArgs);
}
}
}
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:PreAppStructure"
xmlns:roxv="clr-namespace:Rox;assembly=Rox.Xamarin.Video.Portable"
x:Class="PreAppStructure.Page3"
Title="Welcome to page 3!">
<Grid>
<roxv:VideoView x:Name="VideoView"
AutoPlay="True"
LoopPlay="True"
ShowController="True"
Source="http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4"
PropertyChangedCommand="{Binding PropertyChangedCommand}" />
<StackLayout BackgroundColor="Black"
HorizontalOptions="Center"
VerticalOptions="Center"
IsVisible="{Binding IsBusy}">
<ActivityIndicator Color="White"
x:Name="loader"
IsRunning="{Binding IsBusy}"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<Label x:Name ="loadingtext"
Text="Loading...Please wait!"
HorizontalOptions="Center"
TextColor="White"
IsVisible="{Binding IsBusy}"/>
</StackLayout>
</Grid>
</ContentPage>