미리 정의 된 값 집합 (이 경우에는 열거 형)이 콤보 상자 디스플레이에 표시됩니다. 예 :WPF : 열거 형을 콤보 상자에 바인딩 할 수 있습니까?
public enum Protocol
{
UDP = 0,
TCP,
RS232
}
그러나 나는 그것을 끝내는 데 실패하는 것 같습니다. 이것이 가능합니까? 나는 그러나에 아래
미리 정의 된 값 집합 (이 경우에는 열거 형)이 콤보 상자 디스플레이에 표시됩니다. 예 :WPF : 열거 형을 콤보 상자에 바인딩 할 수 있습니까?
public enum Protocol
{
UDP = 0,
TCP,
RS232
}
그러나 나는 그것을 끝내는 데 실패하는 것 같습니다. 이것이 가능합니까? 나는 그러나에 아래
바인딩 names
(분명히 객체하지 않은) 네임 스페이스가 아닌 열거에서 모든 클래스 만 혼합 발견 데이터 바인딩을 사용하려고했습니다 당신 ComboBox
:
이 몰라
var names = Enum.GetNames(typeof(Protocol));
WPF에 대한 것이 아니라 webforms (MVP를 사용하고 있기 때문에)에서 List>를 ddl에 바인드합니다.
롤 생각했을 것이다 사람과
public static class EnumExtensions
{
public static string ToDescription(this Enum en)
{
Type type = en.GetType();
MemberInfo[] memInfo = type.GetMember(en.ToString());
if (memInfo != null && memInfo.Length > 0)
{
object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false);
if (attrs != null && attrs.Length > 0)
return ((DescriptionAttribute)attrs[0]).Description;
}
return en.ToString();
}
public static TEnum NumberToEnum<TEnum>(int number)
{
return (TEnum)Enum.ToObject(typeof(TEnum), number);
}
}
왜 다운-뽑혔다 : 여기에 목록을 얻으려면 그것은 열거에 확장 방법을 사용
var pairs = new List<KeyValuePair<string, string>>(); pairs.Add(new KeyValuePair<string, string>("Please Select", String.Empty)); for (int i = 0; i < typeof(DepartmentEnum).GetFields().Length - 1; i++) { DepartmentEnum de = EnumExtensions.NumberToEnum<DepartmentEnum>(i); pairs.Add(new KeyValuePair<string, string>(de.ToDescription(), de.ToString())); } MyView.Departments = pairs;
몇 가지 코드를 무엇입니까? 나는 정말로 알고 싶다. – epitka
OP는 콤보 상자에 열거 형에 정의 된 이름을 채 웁니다. 솔루션은 리플렉션을 사용하여 enum에 대한 사용자 정의 설명 속성을 찾고 대신 바인딩합니다. 유용 할 수도 있지만 OP가 원하는 것이 아닙니다. –
질문에서 정보를 추출하는 방법은 저 밖에 있습니다. 그는 말합니다 : "콤보 박스는 사전 정의 된 값 세트를 표시합니다 -이 경우 enum"입니다. 아무 곳에도 이름 만 있어야한다고 명시하지 않습니다. – epitka
간단한 – Maciek