在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