此错误是因为您将字符串绑定到需要另一个对象的宽度。
要解决这个问题,其中一个解决方案是使用a Converter 这会将您的类型(来自ViewModel的类型)转换为网格宽度的预期类型。有关转换器的更多信息 这里
Converter
你需要的转换器看起来像这样:
public class IntToGridLengthConverter : IValueConverter { public IntToGridLengthConverter() { } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var intValue = System.Convert.ToInt32(value); return new GridLength(intValue, GridUnitType.Star); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
然后在XAML中你只需要使用它。
将新节添加到XAML并调用Converter
<ContentPage.Resources> <ResourceDictionary> <local:IntToGridLengthConverter x:Key="gridLengthConverter" /> </ResourceDictionary> </ContentPage.Resources>
然后在Bindings中使用Converter
<Grid.ColumnDefinitions> <ColumnDefinition Width="{Binding firstColValue, Converter={StaticResource gridLengthConverter}}" /> <ColumnDefinition Width="{Binding secondColValue, Converter={StaticResource gridLengthConverter}}"/> </Grid.ColumnDefinitions>
如你所见,我正在使用 的 键 强> 这是在上一部分中设定的。
您需要在ViewModel属性中进行一项小改动,现在它们应该是类型 int (整数)。因此,在ViewModel中,您只需设置要设置的值的整数部分,例如:
int
firstColValue = 7; secondColValue = 3;
将这些值转换为的工作 7* 和 3* 分别将负责 的 变流器 强> 。
7*
3*
使用转换器将阻止您使用 的 Xamarin.Forms 强> ViewModel中的元素应该是不可知的。此外,此转换器可以在您需要的任何其他页面中重复使用。
希望这可以帮助。-
您的问题是您尝试绑定的对象。你需要使用一个 GridLength
GridLength
例如
GridLength test = new GridLength(3, GridUnitType.Star); // which is "3*"
只需更新ViewModel即可返回类型值 GridLength