2013-08-23 68 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;