Ich versuche, eine Enum
an eine ComboBox
zu binden. Ich habe viele Leute gesehen, die eine ObjectDataProvider
benutzen, aber ich kann nicht darauf zugreifen. Ich habe auch bemerkt, dass einige Leute es innerhalb einer Window.Resources
anstatt Page.Resources
verwenden, aber ich kann nicht finden, wie es auf Page.Resources
verwendet wird. Ich habe stundenlang nach einer Lösung gesucht.Wie verwende ich einen ObjectDataProvider, um eine Enum an eine ComboBox in XAML zu binden
Was ich habe, so weit:
XAML
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Sports;assembly=Sports"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ViewModel="using:Sports.ViewModel"
xmlns:model="using:Sports.Model"
xmlns:system="using:System"
x:Class="Sports.MainPage"
mc:Ignorable="d">
<Page.DataContext>
<ViewModel:CreateSubsVM/>
</Page.DataContext>
<Page.Resources>
<ObjectDataProvider></ObjectDataProvider>
</Page.Resources>
</Grid>
</Page>
C#
public enum SubsAmount
{
[Display(Description = "One Year")]
Oneyear = 0,
[Display(Description = "Two Years")]
TwoYears = 1,
[Display(Description = "Three Years")]
ThreeYears = 2
}
public class ComboboxConverter: IValueConverter
{
public string GetEnumValues(Enum enumObj)
{
DisplayAttribute attribute = enumObj.GetType().
GetRuntimeField(enumObj.ToString()).
GetCustomAttributes(typeof(SubsAmount), false).
SingleOrDefault() as DisplayAttribute;
return attribute == null ? enumObj.ToString() : attribute.Description;
}
public object Convert(object value, Type targetType, object parameter, string language)
{
return GetEnumValues((Enum) value);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return Enum.ToObject(targetType, value);
}
}
Ich bin ein wenig unklar, wie Sie den Konverter tatsächlich aufrufen. Wie viel Code hast du weggelassen? –
_ "Ich kann nicht darauf zugreifen" _ - was bedeutet das? Der oben angezeigte Code kann 'ObjectDataProvider' nicht erfolgreich verwenden, weil Sie ihn mit einem leeren Element deklariert haben. Es funktioniert nur, wenn Sie die erforderlichen Werte angeben. Richtig ausgeführt, wird es gut funktionieren. Bitte stellen Sie eine gute [mcve] zur Verfügung, die deutlich zeigt, was Sie versucht haben, zusammen mit einer genauen Beschreibung, was falsch gelaufen ist. –