0

xaml ピボット ページからユーザー コントロールのテキスト ブロックにタイマー ティック カウントをバインドする方法。以前はクラスからバインディング値を取得していましたが、変更されたプロパティが機能せず、null 値を返します。

public class sample
{
int timercount = 0;
public int Timercount
{
    get
    {
        return timercount;
    }
    set
    { 
        timercount = value;
        base.OnPropertyChanged("Timercount");
    }
 }
}

public class ViewModelBaseEx : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
     PropertyChangedEventHandler handler = PropertyChanged;
     if (handler != null)
     {
        handler(this, new PropertyChangedEventArgs(name));
     }
}

}

xaml:

<TextBlock Height="34" Name="txtTimer" Width="57" TextAlignment="Left" FontSize="20" TextWrapping="Wrap" Text="{Binding Timercount,Mode=TwoWay}" VerticalAlignment="Top" />

これは、xaml ページで設定したバインディングです

            TimerPageModel mainPage = new TimerPageModel();

            Binding binding = new Binding("Timercount");
            binding.Source = mainPage;
            binding.Mode = BindingMode.TwoWay;
            TextBlock tblk = qplayer.txtTimer;
            BindingOperations.SetBinding(tblk, TextBlock.TextProperty, binding);

qplayerはユーザーコントロールで、TimerPageModelはViewModelBaseExを継承するビューモデルですPropertyChangedは機能していますが、ユーザーコントロールのテキストブロックには何もバインドされていません

バインディングはタイマーティックで機能します

    public class TimerPageModel : ViewModelBaseEx
    {
        private DispatcherTimer timer = new DispatcherTimer();
        private Random random = new Random();
        static int tmrRnd = 30;
        public TimerPageModel()
        {
            timer.Interval = new TimeSpan(0, 0, 5);
            timer.Tick += OnTimer;
            timer.Start();
        }
    }
        int timercount = 0;
        public int Timercount
        {
            get
            {
                return timercount;
            }
            set
            {
                timercount = value;
                base.OnPropertyChanged("Timercount");
            }
        }
        void OnTimer(object sender, EventArgs eventArguments)
        {
            //CurrentValue = random.Next(100);

            Timercount = tmrRnd--;
        }
4

0 に答える 0