C# 绑定中的行的值
我创建了一个C# 绑定中的行的值,c#,xaml,xamarin.forms,C#,Xaml,Xamarin.forms,我创建了一个GridLenght属性,我将其值放入网格中行的绑定中。在我的例子中,该值应该在40个单位左右,但插入该行的collectionview占据整个屏幕的长度 <Grid> <Grid.RowDefinitions> <RowDefinition Height="{Binding HeightEmoji}"/> //other code 在MainPage类中,您需要实现INotifyPropertyC
GridLenght
属性,我将其值放入网格中行的绑定中。在我的例子中,该值应该在40个单位左右,但插入该行的collectionview
占据整个屏幕的长度
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="{Binding HeightEmoji}"/>
//other code
在MainPage类中,您需要实现INotifyPropertyChanged
在HeightEmoji的set属性中,需要调用OnPropertyChanged()
在数据绑定中,需要UpdateSourceTrigger=PropertyChanged
Height=“{Binding HeightEmoji,UpdateSourceTrigger=PropertyChanged}”
要结合其他答案和评论所说的内容,您需要使用正确的绑定实现INotifyPropertyChanged
在代码隐藏中,实现INotifyPropertChanged:
public partial class MainPage : ContentPage, INotifyPropertyChanged
HeightEmoji需要一个支持字段,需要调用PropertyChanged:
private GridLength heightEmoji;
public GridLength HeightEmoji
{
get => heightEmoji;
set
{
heightEmoji = value;
OnPropertyChanged(nameof(HeightEmoji));
}
}
在构造函数中,需要设置绑定上下文:
public MainPage()
{
BindingContext = this;
InitializeComponent();
HeightEmoji = (MyList.Count / 5) * 40;
}
然后在XAML中进行绑定:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="{Binding HeightEmoji}"/>
//other code
//其他代码
我要注意的是,按照您在ctor中设置HeightEmoji的初始调用方式,如果MyList.Count
在设置后发生更改,您的行高将不会更改
更好的解决方法是将行高绑定到转换器。网格/页面的绑定上下文是什么?我还没有分配它。我应该如何分配它?它工作!谢谢,但您是对的,该值不会更新。我该怎么解决?转换器由什么组成?
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="{Binding HeightEmoji}"/>
//other code