绑定 OxyPlot Tracker 并在 TextBlock 中设置获取值
Binding OxyPlot Tracker and set getting value in TextBlock
项目 - 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。如何使用这个事件?
P.S.: 我使用模式 MVVM,所以我想使用命令而不是事件。谢谢!
如果我对您的要求理解正确,您希望在每次更新 Tracker 时更新一个 TextBlock。我相信您对 TrackerChanged 事件的处理是正确的。您可以在创建 PlotModel 实例的 ViewModel 中执行以下操作,该实例将绑定到 OxyPlot Graph
PlotModelName.TrackerChanged += (sender, eventArgs)=>
{
CurrentTrackerValue = eventArgs.HitResult != null ? eventArgs.HitResult.Text : CurrentTrackerValue;
NotifyPropertyChanged(nameof(CurrentTrackerValue));
};
其中 CurrentTrackerValue 定义为
public string CurrentTrackerValue { get; set; }
这将确保每次通过 TrackerChangedEvent
更改 Tracker 时更新 CurrentTrackerValue 属性
伙计们,谢谢它按以下步骤工作:)
.NET 4.7.2
- 我添加了
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}";
项目 - 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。如何使用这个事件? P.S.: 我使用模式 MVVM,所以我想使用命令而不是事件。谢谢!
如果我对您的要求理解正确,您希望在每次更新 Tracker 时更新一个 TextBlock。我相信您对 TrackerChanged 事件的处理是正确的。您可以在创建 PlotModel 实例的 ViewModel 中执行以下操作,该实例将绑定到 OxyPlot Graph
PlotModelName.TrackerChanged += (sender, eventArgs)=>
{
CurrentTrackerValue = eventArgs.HitResult != null ? eventArgs.HitResult.Text : CurrentTrackerValue;
NotifyPropertyChanged(nameof(CurrentTrackerValue));
};
其中 CurrentTrackerValue 定义为
public string CurrentTrackerValue { get; set; }
这将确保每次通过 TrackerChangedEvent
更改 Tracker 时更新 CurrentTrackerValue 属性伙计们,谢谢它按以下步骤工作:)
.NET 4.7.2
- 我添加了
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}";