【问题标题】:String value not passing correctly字符串值未正确传递
【发布时间】:2013-08-27 23:49:31
【问题描述】:

在我的程序中,我有一个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());

为什么会发生这种情况,我该如何解决?

更新:

我已经通过添加这个更改了对 getNumber 函数的调用...

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

理论上这应该可行,但我收到一个InvalidCastException,它说它无法将StackPanel 转换为TextBlockStackPanel 来自哪里……?

感谢您的帮助。

【问题讨论】:

  • 你还记得我告诉过你UI is not Data 并且你不应该阅读 UI 元素的属性吗?如果你听从了我的建议,而不是所有这些可怕的类似 winform 的黑客攻击,那么你现在已经完成了你的应用程序(两次)。
  • 相信你刚刚被骂了
  • @HighCore 我认为你是一个能说出自己想法的人,我很感激。然而,对我来说,你称我的代码是什么并不重要。我明白你在说什么,但我已经取得了比从最底层学习 MVVM 所取得的更多进展。我现在知道我的程序,我知道如何引用它里面的元素,所以这就是我关心的。
  • @Ericafterdark 加上,盲目地编写越来越多的代码,而不是应用适当的模式会导致糟糕的设计,完全臃肿,可能 90% 的代码可以被简单的绑定替换。
  • 你传入了一个StackPanel 对象并在其上调用ToString()StackPanel 没有有意义的“文本”或“字符串”概念,因此使用报告其类型名称的默认行为。您需要访问并传递某种TextBox 控件(或包含在StackPanel 中的任何UI 控件,其中包含您要解析的文本)。此外,您应该0 作为默认值分配给curNumber;它被Int32.TryParse 方法丢弃了。

标签: c# wpf string header treeviewitem


【解决方案1】:

我没有使用getNumber() 函数,而是使用Regexstring 中提取integer

要使用Regex,您需要包含System.Text.RegularExpressions;

然后你像这样实现它:var data = Regex.Match(stringValue, @"\d+").Value;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多