Привязка OxyPlot Tracker и установка получаемого значения в TextBlock - PullRequest
0 голосов
/ 11 февраля 2019

Проект - WPF, C #, IDE - Visual Studio.Я хочу отслеживать значение привязки на моем PlotView .Мой код XAML:

 <Border CornerRadius="6" BorderBrush="Gray" BorderThickness="4" Grid.Column="0" Grid.ColumnSpan="2">
        <oxy:PlotView Background="White" Model="{Binding GraphicModel.Model}"  >

        </oxy:PlotView>
    </Border>

    <TextBlock Text="{Binding CurrentTrackerValue}" Grid.Column="0" Grid.Row="1"/>

Я знаю, что у PlotView.Model есть событие TrackerChange .Как использовать это событие?PS: я использую шаблон MVVM, поэтому я хочу использовать команду вместо события.Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

ребята, спасибо, это работает, шаги ниже:)

.NET 4.7.2

  1. Я добавил INotifyPropertyChanged и

      public string CurrentTrackerValueX { get; set; }
      public string CurrentTrackerValueY { get; set; }

затем сгенерируйте

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    }

затем я следую вашей идее

    pm.TrackerChanged += (sender, eventArgs) =>
    {
        string CurrentTrackerValue = "";
        CurrentTrackerValue = eventArgs.HitResult != null ? eventArgs.HitResult.Text : CurrentTrackerValue;
        if (!String.IsNullOrEmpty(CurrentTrackerValue))
        {
            var x = Regex.Matches(CurrentTrackerValue, "([0-9]*,[0-9]*)");
            CurrentTrackerValueX = x[0].Value;
            CurrentTrackerValueY = x[1].Value;
            OnPropertyChanged(nameof(CurrentTrackerValueX));
            OnPropertyChanged(nameof(CurrentTrackerValueY));
        }
    };

If loop необходима причина нулевого значения в текстовом поле после выхода из Tracker, он все еще хочет дать нулевое значение для текстового поля.

Всесделано и работает с этим типом строки:)


    editcurrentLineSeries[i].TrackerFormatString = "{0}\n{1}: {2:0.00}\n{3}: {4:0.00}";

0 голосов
/ 12 февраля 2019

Если я правильно понимаю ваше требование, вы хотите обновлять TextBlock при каждом обновлении трекера.Я полагаю, что вы были на правильном пути с событием TrackerChanged.Вы можете сделать следующее в вашей ViewModel, где вы создаете экземпляр PlotModel, который будет привязан к графику OxyPlot

PlotModelName.TrackerChanged += (sender, eventArgs)=>
{
  CurrentTrackerValue = eventArgs.HitResult != null ? eventArgs.HitResult.Text : CurrentTrackerValue;
  NotifyPropertyChanged(nameof(CurrentTrackerValue));
};

Где CurrentTrackerValue определяется как

public string CurrentTrackerValue { get; set; }

Это будетубедитесь, что свойство CurrentTrackerValue обновляется при каждом изменении Tracker с помощью TrackerChangedEvent

...