有什么好方法可以将属性绑定到CodeBehind中的const值?

当我使用combobox时,我通常以XAML和代码在后面的代码这样做:

XAML:

<ComboBox Name="cbBuz">
   <ComboBoxItem Content="foo" Uid="foo" IsSelected="true" />
   <ComboBoxItem Content="bar" Uid="bar" />
</ComboBox>

CodeBehind:

ComboBoxItem item = cbBuz.GetSelectedItem();
switch (item.Uid)
{
    case "foo":  ... break;
    case "bar":  ... break;
}

我之所以选择这种方式遵循:

  • 出于本地化目的,不应使用内容字符串来确定在保存和加载最后一个选择的项目期间选择哪个项目。
  • 为简单起见,XAML和代码范围应连接到内部标识符(在这种情况下为UID)。因此,可以单独维护XAML和代码行为。

但是,在维护方面,应该以这样的位置定义内部标识符:

//IDs
public const string ID_foo = "foo";
public const string ID_bar = "bar";

...

//
switch (item.Uid)
{
    case ID_foo:  ... break;
    case ID_bar:  ... break;
}

问题似乎是属性不能是const值,因此无法将ID_FOO和ID_BAR绑定到ComboboxItem的UID:

//If ID_foo and ID_bar are properties, this will work.
<ComboBox Name="cbBuz">
   <ComboBoxItem Content="foo" Uid="{Binding ID_foo}" IsSelected="true" />
   <ComboBoxItem Content="bar" Uid="{Binding ID_bar}" />
</ComboBox>

因此,我想知道如何解决这个问题。或者,有什么更好的方法来实施它。也很好。

最好的,

有帮助吗?

解决方案

您最好使用 Staticextension, ,像这样:

Uid="{x:Static local:YourClass.ID_foo}"

其中local是您类的C#名称空间的XMLN别名。可以找到更多信息 这里.

使用绑定的问题是,您正在为永远不会改变的东西添加很多开销。绑定将尝试监视您的财产。另外,还有 已知的“泄漏” 在不实现InotifyPropertyChanged的对象上使用非依赖性属性的绑定。

其他提示

您需要制作一个返回常数的属性(在const中定义),即:

private const string ID_Foo = "foo";
public string FooId
{
   get { return ID_Foo; }
}

一旦在属性中,它将通过绑定可用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top