Связывание с Windows :: UI :: Xaml :: GridLength в C++/CX

Вопрос:

Я пытаюсь связать экземпляр GridLength в приложении Windows Store (скомпилированный с компилятором Visual Studio 2013) в C++/CX, но по какой-то причине я продолжаю получать следующую ошибку во время выполнения:

Error: Converter failed to convert value of type 'Windows.Foundation.IReference'1<Windows.UI.Xaml.GridLength>' to type 'GridLength'; BindingExpression: Path='MyHeight' DataItem='MyNamespace.MyObject'; target element is 'Windows.UI.Xaml.Controls.RowDefinition' (Name='null'); target property is 'Height' (type 'GridLength').

Мой код выглядит примерно так:

namespace MyNamespace
{
[Windows::UI::Xaml::Data::Bindable]
public ref class MyObject sealed
{
property Windows::UI::Xaml::GridLength MyHeight
{
Windows::UI::Xaml::GridLength get() { return myHeight; }
}
}
}

и мой файл XAML по существу выглядит так:

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="{Binding MyHeight}"/>
</Grid.RowDefinitions>
</Grid>

Просто FYI, другие свойства в моем классе привязываются должным образом. Проблема, похоже, связана только с конструкцией GridLength. Очевидно, что он правильно находит свойство, но по какой-то причине он не может сопоставлять типы.

Лучший ответ:

RowDefinition не является элементом FrameworkElement, поэтому он не имеет DataContext. Связывание здесь не будет. Вы можете поместить Rectangle в эту строку, но установите высоту строки в Auto и привяжите Rectangle.Height к требуемому свойству. Это может работать для некоторых сценариев. Для других могут быть лучшие решения, но вам нужно будет указать, чего именно вы пытаетесь достичь.

Ответ №1

Таким образом, похоже, что проекция типа свойства не работает так, как вы или я ожидал бы этого. Он GridLength свойство GridLength в IReference<T> (или в С#, Nullable<T>). Попробуйте MyHeight.Value к MyHeight.Value.

Оцените статью
TechArks.Ru
Добавить комментарий