В веб-приложении Silverlight у меня есть служба и ее интерфейс, в котором я объявил Enum с днями недели:
[Serializable]
[DataContract]
[Flags]
public enum WeekDaysFlags : int {
[EnumMember]
Monday = 1,
[EnumMember]
Tuesday = 2,
[EnumMember]
Wednesday = 4,
[EnumMember]
Thursday = 8,
etc.
Вернувшись в приложение, у меня есть флажок для каждого дня, который я хотел бы связать; Я сделал красивый конвертер, который принимает параметр:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int d;
if (int.TryParse(parameter.ToString(), out d))
{
WeekDaysFlags mask = WeekDaysFlags.Monday;
switch (d)
{
case 0:
mask = WeekDaysFlags.Sunday;
break;
case 1:
mask = WeekDaysFlags.Monday;
break;
case 2:
mask = WeekDaysFlags.Tuesday;
break;
case 3:
mask = WeekDaysFlags.Wednesday;
break;
case 4:
mask = WeekDaysFlags.Thursday;
break;
case 5:
mask = WeekDaysFlags.Friday;
break;
case 6:
mask = WeekDaysFlags.Saturday;
break;
}
WeekDaysFlags day = (WeekDaysFlags)value;
return (day & mask) == day;
}
return false;
}
Тогда свойство IsChecked флажков получает что-то вроде ниже, с параметрами от 0 до 6 для каждого дня.
IsChecked="{Binding WeeksDays, Mode=TwoWay, Converter={StaticResource DayOfWeekConverter}, ConverterParameter=1}"
Затем я запускаю свою программу, читаю базу данных, связываю объект aaaa и ... ничего! Я ожидаю проверки понедельника и среды, поскольку переменная WeekDays содержит 5.
Когда я отлаживаюсь, я вхожу в конвертер с правильным значением и правильным параметром, он возвращает true или false, когда это предполагается сделать, но в пользовательском интерфейсе ни один из флажков не установлен. Нет понимания ...
На данный момент, так как мне нужно, чтобы он работал, я назначаю IsChecked вручную из кода позади ...
Если у вас есть решение, это было бы здорово! Также мне интересно, как будет работать привязка, когда мне нужно будет «прочитать» отмеченные флажки; то есть как получить 'понедельник | Среда | Четверг, или 13, или что-то в моей переменной из флажков / я поцарапать голову
Спасибо за помощь;)
Сильвен