在Silverlight中的Web應用程序,我有一個服務,它在我宣佈一個枚舉爲期一週的天接口:綁定枚舉複選框和位運算
[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}"
然後我跑我的程序,讀取數據庫,綁定的對象aaaaand ...什麼!由於WeekDays變量包含5,因此我希望檢查星期一和星期三。 當我調試時,我確實用正確的值和正確的參數進入了轉換器,它在應該這樣做時返回true或false,但是在用戶界面,沒有選中複選框。沒有comprendo ...
目前,因爲我需要它的工作,我從後面的代碼手動分配...器isChecked
如果你有一個解決方案,那將是偉大的!我還想知道當我需要「閱讀」選中的複選框時,綁定是如何工作的;即如何獲得'星期一|星期三|週四,或13,或任何從複選框/我刮頭
謝謝您的幫助,我的綁定變量;)
西爾
謝謝!這對我來說很好! – Slyvain