2016-07-05 26 views
1

這個問題與前一個hereC# - WPF - 連接代碼隱藏與XAML元素

一點連接一般來說,我寫一個應用程序,允許用戶創建自己的圖形,然後得到的最短路徑。我得到了圖形表示的困惑。

我很少使用XAML,也不知道如何使用XAML代碼連接代碼隱藏方法。

我得到了畫布點擊鼠標的座標,它的偉大工程

private void mouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 

     int x = (int)e.GetPosition(dataCanvas).X; 
     int y = (int)e.GetPosition(dataCanvas).Y; 
     currentMap.CreateNodes(x, y, "ExampleNode"); 
     targetText.Text = x.ToString() + "X " + y.ToString() + "Y "; // Just for debugging 
    } 

這裏是CreateNode定義:

public void CreateNodes(int x, int y, string name) 
    { 
     Node node = new Node(name); 

     this.places.Add(node); 

     node.X = x; 
     node.Y = y; 

     GUI.CreateNode(node); 
    } 

但問題還在這裏

//GUI class 
    public static void CreateNode(Node n) 
    { 
     Point point = new Point(n.X, n.Y); 
    } 

這方法應該在特定的(x,y)位置繪製圖像。 我有座標,必須以某種方式在那裏創建一個圖像。 正如我所說我不是使用XAML的通量,也不知道如何將此代碼與調整XAML中的畫布連接以創建和操作圖像。

我得到一個鏈接here

,但我不知道如何在我的項目中使用它。我應該創建一個ObservableCollection,然後使用鏈接中的代碼...?

任何幫助,將不勝感激。

這裏有接口​​:here

回答

1

首先,除非有將是更多的功能吧,你的Node類是多餘的。如果您的目標是爲圖形創建一組點以顯示(並連接),則您需要創建一個ObservableCollection<Point>並構建一個自定義圖形控件。

爲什麼ObservableCollection?

它是一個實現INotifyPropertyChanged()的集合(將其視爲列表),並讓消費者知道其元素已經改變。

至於圖表,我強烈建議你看看OxyPlot。 這是一個跨平臺的繪圖庫,它將消除從頭創建自己的圖形控件的痛苦。

如果由於某種原因您仍想開發自己的圖形控件,請參閱here。 網上也有很多教程,你可以通過Google搜索draw graph in WPF C#找到。

如何將XAML與代碼連接?

現在,在你的情況下,這裏可能有很多解決方案。 我想到的最簡單的方法是使用PolyLine類,並將它的Points屬性綁定到您的ObservableCollection<Point>

可以做這樣:

<Polyline Points="{Binding YourCollectionName}" Stroke="SomeColor" StrokeThickness="SomeNumber" /> 

如果您有更多疑問,可隨時通過添加以下:)

根據要求評論,MVVM的簡單解釋問:

MVVM是design pattern。目標是基本上將您的程序分爲三個主要部分:View,ViewModel和Model。

模型 - 這將成爲您的數據模型與所有業務和驗證邏輯。

視圖模型 - 這是排序ViewModel之間的調停者通過調用影響Model,並在View被調用的方法。值得注意的是,虛擬機不知道視圖。

查看 - 它基本上是你所有的按鈕和東西的GUI。它具有綁定到VM組件的能力,因此它可以將信息輸入和輸出。 通過定義DataContext將虛擬機分配給View

爲什麼要使用MVVM?

儘管學習甚至時不時應用可能會有挑戰性,但它爲您提供了在Unit Testing中極大幫助的分離。

大多數WPF應用程序現在與MVVM去,所以這實際上是值得學習(和一些它的特點是非常有用和有趣的應用!)

+0

非常感謝您對這個問題的答案,我會檢查庫和鏈接。節點類是必要的,因爲整個尋路算法都適用於它。在WinForms中創建它真的很容易,但是WF是過去的,所以我決定在WPF中創建它。肯定會出現問題,所以我會回來這裏問:)其實我已經有一個:在幾乎每個與WPF相關的地方都有一些MVVM模式。我只是好奇它是否真的被廣泛使用,以及它是否像它看起來那麼複雜。 – pablocity

+0

MVVM通常是WPF開發的標準。如果你使用WPF,這絕對值得學習。基本概念相對簡單,但你需要做一些閱讀。我在你的[其他問題]中添加了幾個教程的鏈接(http://stackoverflow.com/questions/38192845/wpf-c-sharp-creating-and-setting-image-coordinates-in-code-behind) – Tone

+0

讓我在下面的答案中詳細解釋一下。我會編輯我的帖子,所以看看那裏。 –