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