2016-09-20 5 views
1

Hi Xamarin/MvvmCross devs,Изменения в привязках MvvmCross

Это всего лишь вопрос из любопытства. В одном из приложений, которые я разрабатываю, какое-то поведение изменилось. В частности, на iOS при привязке значения UISwitch «On» к логическому в ViewModel. Геттер на свойстве срабатывает, когда применяется привязка, а также установщик при переключении переключателя, но пользовательский интерфейс его не отражает. Заставлять меня, чтобы перейти от просто

var set = this.CreateBindingSet<SettingsView, SettingsViewModel>(); 
set.Bind(PushNotificationSwitch).For(s => s.On) 
    .To(vm => vm.ReceivePushNotifications); 
set.Apply(); 

Для того, чтобы добавить ниже, что после (получить интерфейс переключателя, чтобы отразить значение)

var settingsViewModel = ((SettingsViewModel)ViewModel); 
PushNotificationSwitch.On = settingsViewModel.ReceivePushNotifications; 

Я оставил связывание, а также новый код, отражающий состояние пользовательского интерфейса, потому что в дополнение к пользовательскому интерфейсу, отражающему только правильное состояние, я также хочу, чтобы он менял состояние в моих настройках. Сервис, когда пользователь меняет его.

Недавно я обновился через Xamarin Studio на Mac, а версия iOS Xam Version: 10.0.0.6. К сожалению, я не проверял, какую версию я обновил, но я всегда обновляюсь, как только вижу, что есть один доступный, так что это должна быть предыдущая стабильная версия.

Мои вопросы:

  • ли какой-либо из вас испытывали подобные проблемы, где переплеты изменены таким образом?
  • Поскольку привязка Android все еще работает нормально, считаете ли вы, что это проблема в MvvmCross или iOS Xamarin Changes
  • Какие-либо предположения относительно того, что может быть причиной этого? И другие части, которые, по вашему мнению, могут повлиять на меня, поэтому мне не придется идти на поиски ошибок, если их не существует. Команды, текстовые и пользовательские привязки управления отлично работают (насколько я проверял)

Если этот вопрос лучше подходит где-то в другом месте, пожалуйста, дайте мне знать, мне просто интересно это поведение.

Благодаря

+0

Означает ли это поведение как для сборки отладки, так и для выпуска или только для одного из них? Это может быть компоновщик, который снимает код. У вас есть код в файле LinkerPleaseInclude для коммутаторов? – Cheesebaron

+0

@Cheesebaron Это происходит как для отладки, так и для выпуска, и у меня нет кода для переключателей в моем файле LinkerPleaseInclude. –

+0

Можете ли вы попробовать добавить: 'public void Include (UISwitch sw) { sw.On =! Sw.On; sw.ValueChanged + = (отправитель, args) => {sw.On = false; }; } ' – Cheesebaron

ответ

3

Как мы работали в комментариях ФП событие коммутатора был связан из. Следовательно, привязка ничего не сделала.

Самый простой способ исправить это, чтобы добавить следующий код в файл LinkerPleaseInclude.cs, который MvvmCross обеспечивает в Startup NuGet и через доступные для Visual Studio и Xamarin студии шаблонов:

public void Include(UISwitch sw) 
{ 
    sw.On = !sw.On; 
    sw.ValueChanged += (sender, args) => 
    { 
     sw.On = false; 
    }; 
} 

Это будет сообщите Linker, что существует прямое использование события ValueChanged и свойства On, так как класс LinkerPleaseInclude использует атрибут Preserve.

Смежные вопросы