在 WPF / Regex 中读取 Application.Current.Properties 的整数
Posted
技术标签:
【中文标题】在 WPF / Regex 中读取 Application.Current.Properties 的整数【英文标题】:Reading out integers of Application.Current.Properties in WPF / Regex 【发布时间】:2021-08-26 19:29:12 【问题描述】:我对编码比较陌生。目前正在使用 WPF 做一个项目,我正在努力从 Application.Current.Properties 中加载数据。
我总共有 6 个 Windows(1 个用于启动,4 个用于设置,1 个用于最终演示)。我必须在 4 个设置窗口中保存数据并将它们加载到最终窗口中。对于 3 个窗口,它可以工作,但最后一个窗口有问题。
错误(我认为)一定是我在第二个窗口中读取和/或保存数据的方式。当我在将数据保存到 App.Current.Properties 之前检查数据时,它仍然是正确的.一旦我在最终窗口中加载它,值都是 0。
感谢您的任何建议!
实际工作示例:
保存数据:
object timecap = ForTimeTimecap.SelectedValue;
Application.Current.Properties["Timecap"] = timecap;
加载数据:
timecapString = Application.Current.Properties["Timecap"].ToString();
int timecap = Convert.ToInt32(Regex.Match(timecapString, @"\d+").Value);
返回所有值为 0 的值:
存储数据:(窗口 1)
object work = ComboBoxWork.SelectedValue;
Application.Current.Properties["WorkSeconds"] = work;
加载数据:(窗口 2)
workSecondsString = Application.Current.Properties["WorkSeconds"].ToString();
int workSeconds = Convert.ToInt32(Regex.Match(workSecondsString, @"\d+").Value);
此外,如果您有更优雅的方式将加载的数据存储到整数中,我愿意提供建议。隐式和显式转换不起作用。 WPF 总是在我启动应用程序时给我错误。
编辑: Combobox中的项目是通过c#添加的:
for (int i = 0; i <= 15; i++)
ComboboxItem item = new ComboboxItem();
item.Text = i + " Min.";
item.Value = i;
ForTimeTimecap.Items.Add(item);
【问题讨论】:
你为什么要做这个字符串解析,而不是简单地通过转换来存储和检索所需的类型?例如。喜欢int x = (int)Application.Current.Properties["WorkSeconds"];
我得到错误:System.InvalidCastException by using this
然后告诉我们您实际存储的是什么类型。 ComboBoxWork.SelectedValue
是什么?你设置ComboBox的SelectedValuePath了吗?
到目前为止,我存储了一个对象(我假设 App.Current.Properties 无论如何都会返回一个 obj)。但我还没有设置组合框的 SelectedValuePath。我只是将其设置为“int”吗?
对于我使用的组合框项: for (int i = 0; i
【参考方案1】:
您可以通过在 ComboBox 上设置 SelectedValuePath="Value"
来访问 ComboboxItems 的 Value
属性。
然后ComboBoxWork.SelectedValue
将返回所选项目的整数值:
int work = (int)ComboBoxWork.SelectedValue;
这要求Value
是公共属性,而不是 ComboboxItem 类的字段。
然而,一个更“优雅”的方法是根本没有 ComboboxItems。
改为直接使用int
项目。像
<ComboBox x:Name="ComboBoxWork">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="Binding StringFormat=0 Min."/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
并用整数填充 ComboBox:
ComboBoxWork.ItemsSource = Enumerable.Range(0, 16);
现在SelectedItem
会给你一个整数:
int work = (int)ComboBoxWork.SelectedItem;
你喜欢的存储
Application.Current.Properties["WorkSeconds"] = work;
然后像这样检索
int work = (int)Application.Current.Properties["WorkSeconds"];
【讨论】:
我还在编辑。我刚刚意识到您声明了自己的 ComboboxItem 类型。不要那样做。遵循“更好的方法”。以上是关于在 WPF / Regex 中读取 Application.Current.Properties 的整数的主要内容,如果未能解决你的问题,请参考以下文章
使用bash在changelog文件中读取文件直到regex