Это вопрос компилятора, который был исправлен в Windows 10 Anniversary Update SDK (14393).
Как известно, {x:Bind} использует сгенерированный код для его преимуществ. При компиляции XAML {x:Bind}
преобразуется в код, который получит значение из свойства в источнике данных и устанавливает его в свойстве, указанном в разметке.
Когда целевые приложения более ранних версий, чем 14393, он будет генерировать код как следующее, чтобы обновить двухстороннее связывание:
this.obj2 = (global::Windows.UI.Xaml.Controls.Grid)target;
(this.obj2).RegisterPropertyChangedCallback(global::Windows.UI.Xaml.Controls.Canvas.LeftProperty,
(global::Windows.UI.Xaml.DependencyObject sender, global::Windows.UI.Xaml.DependencyProperty prop) =>
{
if (this.initialized)
{
// Update Two Way binding
this.dataRoot.PositionX = (this.obj2).Left;
}
});
(this.obj2).RegisterPropertyChangedCallback(global::Windows.UI.Xaml.Controls.Canvas.TopProperty,
(global::Windows.UI.Xaml.DependencyObject sender, global::Windows.UI.Xaml.DependencyProperty prop) =>
{
if (this.initialized)
{
// Update Two Way binding
this.dataRoot.PositionY = (this.obj2).Top;
}
});
obj2
является Grid
, он не содержит свойство с именем Left
или Top
, поэтому мы 'Получают ошибки компилятора.
Чтобы устранить эту проблему, минимальная целевая версия SDK для приложения должна быть 14393 или новее. Чтобы изменить версию Minimum и Target для проекта, который уже был создан в Visual Studio, перейдите к Проект → Свойства → вкладка Приложения → Таргетинг.
После этого, мы можем Rebuild проект, то не должно быть никаких ошибок компилятора. Связывание должно быть сгенерировано правильно.
this.obj2 = (global::Windows.UI.Xaml.Controls.Grid)target;
(this.obj2).RegisterPropertyChangedCallback(global::Windows.UI.Xaml.Controls.Canvas.LeftProperty,
(global::Windows.UI.Xaml.DependencyObject sender, global::Windows.UI.Xaml.DependencyProperty prop) =>
{
if (this.initialized)
{
// Update Two Way binding
this.dataRoot.PositionX = global::Windows.UI.Xaml.Controls.Canvas.GetLeft(this.obj2);
}
});
(this.obj2).RegisterPropertyChangedCallback(global::Windows.UI.Xaml.Controls.Canvas.TopProperty,
(global::Windows.UI.Xaml.DependencyObject sender, global::Windows.UI.Xaml.DependencyProperty prop) =>
{
if (this.initialized)
{
// Update Two Way binding
this.dataRoot.PositionY = global::Windows.UI.Xaml.Controls.Canvas.GetTop(this.obj2);
}
});
Не могли бы вы поделиться [mcve], который может воспроизвести вашу проблему? –
@ JayZuo-MSFT да, я сделал – SmiLe
Я протестировал с кодом, который вы опубликовали, в моей стороне нет ошибки компилятора. Возможно, проблема не в том коде, который вы опубликовали. Вы можете попробовать с кодом в новом проекте Blank App. Если у вас все еще есть проблемы, пожалуйста, поделитесь [mcve]. –