簡體   English   中英

XAML綁定列表枚舉

[英]XAML binding list enum

   class EnumToStringConverter : IValueConverter
    {

    public object Convert(object value, Type targetType, object parameter, string language)

    {
            return loai.ToDisplaytring();
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

<ListView ItemsSource="{Binding ListEnum" Margin="0,51,0,0">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=.,Converter={StaticResource EnumToStringConverter}}" HorizontalAlignment="Center" FontSize="18"/>
                        </DataTemplate>
                    </ListView.ItemTemplate>
    </ListView>

我是XAML的新手。

我只想在列表視圖中顯示枚舉。

但是它具有通過綁定來綁定自身的問題:

{Binding Path=.,Converter={StaticResource EnumToStringConverter}}

您可以使用具有屬性的枚舉,並使用擴展方法為列表框創建列表。您可以參考以下代碼。

    <ListBox Width="200" Height="25" ItemsSource="{Binding ComboSource}"
              DisplayMemberPath="Value"
              SelectedValuePath="Key"/>
 public class MainViewModel
{
    public List<KeyValuePair<RentStatus, string>> ComboSource { get; set; }

    public MainViewModel()
    {
        ComboSource = new List<KeyValuePair<RentStatus, string>>();
        RentStatus re=RentStatus.Active;
        ComboSource = re.GetValuesForComboBox<RentStatus>();
    }
}

public enum RentStatus
{
    [Description("Preparation description")]
    Preparation,
    [Description("Active description")]
    Active,
    [Description("Rented to people")]
    Rented
}

public static class ExtensionMethods
{       
    public static List<KeyValuePair<T, string>> GetValuesForComboBox<T>(this Enum theEnum)
    {
        List<KeyValuePair<T, string>> _comboBoxItemSource = null;
        if (_comboBoxItemSource == null)
        {
            _comboBoxItemSource = new List<KeyValuePair<T, string>>();
            foreach (T level in Enum.GetValues(typeof(T)))
            {
                string Description = string.Empty;                    
                FieldInfo fieldInfo = level.GetType().GetField(level.ToString());
                DescriptionAttribute[] attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);                    
                if (attributes != null && attributes.Length > 0)
                {
                    Description = attributes.FirstOrDefault().Description;
                }
                KeyValuePair<T, string> TypeKeyValue = new KeyValuePair<T, string>(level, Description);
                _comboBoxItemSource.Add(TypeKeyValue);
            }
        }
        return _comboBoxItemSource;
    }
}

這比較簡單:

 <ListView x:Name="ListViewInstance" ItemsSource="{Binding ListEnum}" Margin="0,51,0,0">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}" HorizontalAlignment="Center" FontSize="18"/>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

那就是獲取物品的綁定,它會自動制造物品.ToString()

並顯示DataContext中的所有值,例如:

public List<Devices> ListEnum {  get { return typeof(Devices).GetEnumValues().Cast<Devices>().ToList(); } }

如果需要轉換器,請執行以下操作:

 public class EnumToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return what you need to convert from value
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

然后在XAML中

<Window.Resources>
    <local:EnumToStringConverter  x:Key="EnumToStringConverter"/>
</Window.Resources>

<ListView x:Name="ListViewInstance" ItemsSource="{Binding ListEnum}" Margin="0,51,0,0">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding, Converter={StaticResource EnumToStringConverter}}" HorizontalAlignment="Center" FontSize="18"/>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM