2013-12-13 10 views
0

로봇 팔과 퍼지 로직을 실험하고 있습니다. 내 목표는 회원 함수 (간단한 삼각형 및 사다리꼴 함수) 사용자가 만든 것입니다. 옥시 플롯 '객체'는 MainWindow에있는 확장기에 있습니다. 플롯 선택은 대부분 드롭 다운 또는 텍스트 상자에서 이루어집니다.요청시 Oxyplot C# WPF 업데이트

불행히도 새로운 정보로 플롯을 업데이트하는 방법을 알 수 없습니다. 모든 예제는 시간을 기준으로 동적 인 것처럼 보입니다. 그러나 나는 그것이 사용자 요구를 기반으로해야합니다! 찾을 수있는 가장 가까운 예는 RefreshTask 데모 파일입니다. 라고 생각합니다.입니다.

까지가 지금은 제목 원래, 빈 플롯을 생산할 수 있었던 것으로 다음과 같은 구문을 사용하여 축을 :

public partial class MainWindow : Window 
{ 

    private PlotModel plotModel; 

    public PlotModel PlotModel 
    { 
     get 
     { 
      return this.plotModel; 
     } 
     set 
     { 
      this.plotModel = value; 
     } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
     this.PlotModel = CreatePlot("mag1"); 
    } 


    private PlotModel CreatePlot(string title) 
    { 
     var pm = new PlotModel(title); 

     return pm; 
    } 

그리고 XAML

<Window x:Class="FuzzyGripper.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:oxy="clr-namespace:OxyPlot.Wpf;assembly=OxyPlot.Wpf" 
    Title="MainWindow" Height="800" Width="1000" Closing="Window_Closing" Loaded="Window_Loaded"> 

...... A ton of stuff ...... then...... 

<oxy:Plot x:Name="plot1" Model="{Binding PlotModel}"/> 

을 문제는 때 온다 플롯을 새 타이틀만큼 간단하게 업데이트하려고합니다. 개체가 MainWindow 생성자에있을 때만 OxyPlot을 업데이트 할 수 있다고 알려줍니다. 원래 줄거리를 만든 후 예를 들어 다음 코드를 호출 (MainWindow를의 외부() {}) :

this.plotModel = CreatePlot("Mag2"); 
plot1.RefreshPlot(true); 

이 작동하지 않습니다. 원본 그림은 "Mag1"이라는 제목으로 남아 있습니다. 나는 컨텍스트와 관련된, 특히 DataContext와 관련된 것을 놓친다는 느낌이 들지만, 나는 언어에 매우 만족하지 않아 붙어있다! 그 말로는 Oxyplot에서 완전히 팔리지는 않았습니다. 더 나은 접근법이 있다면 나는 그것을 시도해 볼 의사가있다. 읽어 주셔서 감사합니다.

답변

4

OxyPlot에서 PlotModel을 사용하는 배경은 MVVM을 사용하는 것이므로 Codebehind를 사용하여 실제로하려는 작업을하지 않아야합니다. 먼저 WPF에 매우 중요하다 concept of MVVM을 확인하고 다음 코드 문제는 당신이 this.plotModel = CreatePlot("Mag2")을 수행 할 때, 당신이있어 것입니다 Caliburn Micro 또는 MVVM Light

처럼, 그것으로 당신을 도와 다른 MVVM 프레임 워크를 보라 새 PlotModel 개체를 만들면 WPF는 이전 개체와의 바인딩을 잃게됩니다. PlotModel 속성이 변경되었다는 것을 알려 주어야합니다 (INotifyPropertyChange 구현).

하지만 어쨌든 제목을 변경하려면 전체 PlotModel을 다시 작성하면 안되므로 this.PlotModel.Title = "Mag2"과 같이해야합니다.

또한 PlotModel 자체에 새로 고침 메서드가 있으므로 Plot의 새로 고침 대신이 메서드를 호출하는 것이 좋습니다.

행운을 빈다.