我已经在Xamarin.Forms中布置了一个XML页面,该页面在“网格”中具有一个“ stacklayout”。我想以编程方式设置/更改网格行距高度。
我的XML:
<Grid x:Name="outerGrid">
<StackLayout x:Name="MyStackLayout" Grid.Row="5" Grid.RowSpan="{Binding MyRowSpanValue}" Grid.Column="0">
<!-- labels/buttons are added here in code-behind -->
</StackLayout>
</Grid>
现在在我的隐藏代码中,有条件地使用类似以下的命令进行设置:
if (somevar == 2)
MyRowSpanValue = 5
else
MyRowSpanValue = 10
要执行此操作的C#代码是什么?我的机器无法正常工作,甚至尝试将其放入“ OnAppearing()”替代中。
感谢您的帮助!
答案 0 :(得分:1)
grid
中指定任何列,因此StackLayout
没有跨列的列INotifyPropertyChanged
。只需致电OnPropertyChanged(nameof(MyRowSpanValue))
编辑
如果使用ViewModel:
首先,您需要一个x:Name="Page"
或您想调用页面的任何名称。然后,引用它的代码将如下所示:
<StackLayout x:Name="MyStackLayout"
Grid.Row="5"
Grid.RowSpan="{Binding MyRowSpanValue, Source={x:Reference Page}}"
Grid.Column="0">
<!-- labels/buttons are added here in code-behind -->
</StackLayout>
不使用ViewModel
在页面构造器中,设置BindingContext=this;
,然后xaml /页面将在代码中查找 MyRowSpanValue 属性。
public YourConstructor()
{
BindingContext = this; // Code behind will be binding context for XAML
}
要更改属性值时(在两种情况下都使用)
public int MyRowSpanValue { get; set; }
// When you want to change the MyRowSpanProperty
public void ChangeTheValue()
{
MyRowSpanValue = 3; // Or whatever value you are wanting
OnPropertyChanged(nameof(MyRowSpanValue));
}