2013-08-23 67 views
0

在我的程序中,我有一個TreeViewItem,它的Header設置爲數值integer的值。爲了將Header轉換爲直接的int值,我傳遞給一個名爲getNumber的函數。字符串值未正確傳遞

getNumber功能:

此功能來自this previously asked question

//Gets the number contained in a Node's header 
public static int getNumber(string parentNodeHeader) 
{ 
    int curNumber = 0; 
    Int32.TryParse(parentNodeHeader, out curNumber); 
    return curNumber; 
} 

我通過這個功能在我的程序的幾個不同的區域以同樣的方式,但其中一人string不正確地傳遞。在調試器中,它(parentNodeHeader)顯示"System.Windows.Controls.StackPanel",因爲它是值而不是數字。我不知道爲什麼會發生這種情況。

對於對函數的工作調用以及不工作的調用,我使用相同的代碼。

int curNumber = getNumber(SelectedItem.Header.ToString()); 

爲什麼會發生這種情況,我該如何解決?

UPDATE:

我加入這個改變了我的調用getNumber功能...

var selectedHeader = (TextBlock)SelectedItem.Header; //The header is now a TextBlock 
int curNumber = getNumber(selectedHeader.Text); 

理論上這應該工作,但是我得到的InvalidCastException,指出它可能不投StackPanelTextBlockStackPanel從哪裏來?

感謝您的幫助。

+2

你還記得我告訴過你[UI不是數據(HTTP://計算器。 com/a/14382137/643085),你不應該閱讀UI元素的屬性?如果你遵循了我的建議,而不是像所有這些可怕的winform一樣,你現在已經完成了你的申請(兩次)。 –

+0

我相信你剛剛被斥責 – Jonesopolis

+2

@HighCore我認爲你是一個說他心裏在想什麼的人,我很欣賞這一點。但是,對於我來說,你調用我的代碼並不重要。我明白你在說什麼,但是我已經取得了這樣的進步,我從來沒有試圖從最底層學習MVVM。我現在知道我的程序,而且我知道如何引用它裏面的元素,所以這就是我關心的。 –

回答

1

代替使用getNumber()函數,我用Regexstring中提取integer

爲了使用Regex你需要包括System.Text.RegularExpressions;

然後你實現它,像這樣:var data = Regex.Match(stringValue, @"\d+").Value;