如何在C#中定义一个常量并在XAML中使用它?
我尝试在必要时为字符串值定义常量,以避免在代码中隐藏“神奇字符串”。我最近发现自己需要为转换器定义一个自定义格式字符串,所以我定义了如何在C#中定义一个常量并在XAML中使用它?,c#,data-binding,uwp,uwp-xaml,converters,C#,Data Binding,Uwp,Uwp Xaml,Converters,我尝试在必要时为字符串值定义常量,以避免在代码中隐藏“神奇字符串”。我最近发现自己需要为转换器定义一个自定义格式字符串,所以我定义了public const string MyFormat=“a”在转换器中。使用转换器时,我需要输入“a”作为ConverterParameter,但我希望引用命名常量,而不是键入ConverterParameter=a <TextBlock Text="{x:Bind SomeProperty, Converter={StaticResource MyCon
public const string MyFormat=“a”代码>在转换器中。使用转换器时,我需要输入“a”作为ConverterParameter
,但我希望引用命名常量,而不是键入ConverterParameter=a
<TextBlock Text="{x:Bind SomeProperty, Converter={StaticResource MyConverter}, ConverterParameter=???}" />
MainPage.xaml.cs
using System.ComponentModel;
using Windows.UI.Xaml.Controls;
namespace XamlConstantReference
{
public sealed partial class MainPage : Page, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _someProperty = "Hello World!";
public string SomeProperty
{
get => _someProperty;
set
{
if (_someProperty != value)
{
_someProperty = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SomeProperty)));
}
}
}
public MainPage()
{
InitializeComponent();
}
}
}
MyConverter.cs
using System;
using Windows.UI.Xaml.Data;
namespace XamlConstantReference
{
public class MyConverter : IValueConverter
{
public const string MyFormat = "a";
public object Convert(object value, Type targetType, object parameter, string language)
{
if (parameter == null)
{
return $"Fail. Formatted '{value}' with null parameter.";
}
else if (parameter is string parameterString)
{
switch (parameterString)
{
case MyFormat:
return $"Success! Formatted '{value}' with parameter '{parameterString}'.";
default:
return $"Fail. Formatted '{value}' with parameter '{parameterString}'.";
}
}
throw new ArgumentException();
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
}
在XAML中使用{x:Static}
标记扩展来引用C#类中的常量成员。请参阅标记的副本。如果您遇到问题,请发布一个新问题,但请确保该问题包含一个好问题,而不是上面提到的问题。@PeterDuniho{x:Static}在UWP中不存在。在我发布我的问题之前,我回顾了您链接到的所有问题。这三个都是WPF,不适用于UWP。我在我的问题中特别指出,“(注意:这是UWP,不是WPF。)”我清楚地提供了一个我专门为这个问题创建的问题的副本。“第一个涉及枚举,并提供了在XAML中使用枚举值的解决方案,但没有说明如何使用字符串常量,并且不能扩展到字符串常量。””“是的。你应该养成阅读问题第一个答案的习惯。“表明在UWP中没有办法绑定到静态变量”——听起来像是对你的确切问题的回答。您想要使用的数据类型在这里似乎不相关。“您特别建议省略哪些内容?”——实际上不需要的内容。我不会浪费时间逐行阅读您的文章,但是,例如,本例不需要错误处理代码,也不需要所有的XAML标记(一个属性绑定就足以完成手头的任务)。你的帖子中有很多代码在这里根本不重要。@JeremiahMercier请注意,最后一个论点(我是问这个问题的人,所以我知道它是否重复)是非常错误的。典型的问题是提问者根本不知道一个问题是如何重复的。我并不是说这里的情况就是这样;我只想指出,这种推理是一种危险的推理,不应依赖。
using System;
using Windows.UI.Xaml.Data;
namespace XamlConstantReference
{
public class MyConverter : IValueConverter
{
public const string MyFormat = "a";
public object Convert(object value, Type targetType, object parameter, string language)
{
if (parameter == null)
{
return $"Fail. Formatted '{value}' with null parameter.";
}
else if (parameter is string parameterString)
{
switch (parameterString)
{
case MyFormat:
return $"Success! Formatted '{value}' with parameter '{parameterString}'.";
default:
return $"Fail. Formatted '{value}' with parameter '{parameterString}'.";
}
}
throw new ArgumentException();
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
}