【问题标题】:Binding Xamarin XAML to code behind properties (ListView)将 Xamarin XAML 绑定到属性背后的代码 (ListView)
【发布时间】:2018-08-25 00:00:50
【问题描述】:

我想将我的代码隐藏属性(一个列表)绑定到 XAML ListView。但是,我的 ListView 从未填充,我不知道为什么。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="BLEPl.EvaluationPage"
             Title="Evaluation">
    <ContentPage.Content>
        <StackLayout Padding="0,20,0,20">      
            <ListView HasUnevenRows="True" IsVisible="True" x:Name="TableLayout" ItemsSource="{Binding Path=SensorValues}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid>
                                <Label Style="{StaticResource TitleLabel}" Grid.Column="0" Grid.Row="0" Text="Zeitstempel: " />
                                <Label Style="{StaticResource DataLabel}" Grid.Column="1" Grid.Row="0" Text="{Binding TimeStamp}" />

                                <Label Style="{StaticResource TitleLabel}" Grid.Column="0" Grid.Row="1" Text="Wert: " />
                                <Label Style="{StaticResource DataLabel}" Grid.Column="1" Grid.Row="1" Text="{Binding Value}" />

                                <Label Style="{StaticResource TitleLabel}" Grid.Column="0" Grid.Row="2" Text="Sensor: " />
                                <Label Style="{StaticResource DataLabel}" Grid.Column="1" Grid.Row="2" Text="{Binding Sensor.Name}" />
                            </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class EvaluationPage : ContentPage
{
    private ObservableCollection<SensorValue> SensorValues = new ObservableCollection<SensorValue>();

    public EvaluationPage ()
    {
        InitializeComponent ();

        using (var context = new BlepContext(true))
        {
            var repo = new BLEPRepository(context);
            SensorValues = new ObservableCollection<SensorValue>(repo.GetAllSensorValues());
        }
    }
}

当我运行它时,我的 ListView 不包含任何项目。我没有收到错误,我的应用程序编译得很好。我在这里做错了吗?

【问题讨论】:

  • a) 您只能绑定到公共属性,b) 您似乎没有设置 BindingContext
  • 对不起,我已经公开了我的财产,但我似乎用 Ctrl-Z 太远了。你的第二句话是什么意思?我试过这样设置:BindingContext="{x:Reference this} 在 ListView XAML 中,但我得到一个错误:Can not find the object referenced by 'this'

标签: xamarin data-binding properties code-behind


【解决方案1】:
<ListView HasUnevenRows="True" IsVisible="True" x:Name="TableLayout" ItemsSource="{Binding SensorValues}">

只能绑定公共属性,需要为页面设置一个BindingContext

// needs to be a PUBLIC PROPERTY
public ObservableCollection<SensorValue> SensorValues { get; set; }

public EvaluationPage ()
{
    InitializeComponent ();

    // set the BindingContext
    this.BindingContext = this;

    using (var context = new BlepContext(true))
    {
        var repo = new BLEPRepository(context);
        SensorValues = new ObservableCollection<SensorValue>(repo.GetAllSensorValues());
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多