【问题标题】:Xamarin Forms: Data Binding issue with MVVM in a ListViewXamarin Forms:ListView 中 MVVM 的数据绑定问题
【发布时间】:2016-08-10 08:55:15
【问题描述】:

view

viewmodel, model and code behind

大家好,

在 XAML 的 ListView 中识别 MVVM 模式的数据绑定方面需要帮助。我不知道为什么它不起作用。我在视图上看不到任何数据。我通过调试得到了这个异常。

Xamarin.Forms.Xaml.XamlParseException:位置 8:10。属性内容为空或不是 IEnumerable

感谢您的回答。

XAML

  <ViewCell>
        <StackLayout HorizontalOptions="FillAndExpand" Orientation="Horizontal">
         <StackLayout HorizontalOptions="Start" Orientation="Vertical">
               <Label Text="{Binding Name}" />
          </StackLayout>
          <StackLayout HorizontalOptions="End" Orientation="Vertical">
                <Label Text="{Binding Information}" />
           </StackLayout>
     </StackLayout>
</ViewCell>

代码

public partial class PartyStatusPage : ContentPage
{
    public PartyStatusPage()
    {
        InitializeComponent();            
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();

        BindingContext = new PartyStatusPageViewModel();
    }
}

public class PartyStatusPageViewModel
{
    public List<PartyStatus> ItemList;

    public PartyStatusPageViewModel()
    {
        ItemList = new List<PartyStatus>();
        ItemList.Add(new PartyStatus { Name = "Max", Information = "test" });
    }
}

public class PartyStatus
{
    public string Name { get; set; }

    public string Information { get; set; }

    public bool State { get; set; }
}

【问题讨论】:

  • 请不要使用屏幕来显示您的代码。在代码标签中发布您的代码。另外,让你的 Source 成为一个属性而不是一个字段
  • 抱歉,我是新用户。感谢您的提示。

标签: c# xaml mvvm data-binding xamarin.forms


【解决方案1】:

XAML 中的 DataTemplate 错误。您需要明确指定ViewCell 的视图。查看以下 XAML:

<ListView.ItemTemplate>
    <DataTemplate>
        <ViewCell>
            <ViewCell.View>
                <!-- Your template (StackLayout for example -->
            </ViewCell.View>
        </ViewCell>
    </DataTemplate>
</ListView.ItemTemplate>

【讨论】:

    【解决方案2】:

    例如 XAML:

    <ListView x:Name="listView" ItemsSource="{Binding Readycontacts}" SelectedItem="{Binding SelectedItem}"  Margin="10,10,94.234,10">
            <ListView.View>
                <GridView>
                    <GridViewColumn    Width="130" Header="Name"
                        DisplayMemberBinding="{Binding Path=Name}" />
                    <GridViewColumn Width="180" Header="Adresse"
                        DisplayMemberBinding="{Binding Path=Addresse}" />
                    <GridViewColumn Width="130" Header="Telefonnummer"
                        DisplayMemberBinding="{Binding Path=Telefonnummer}" />
                    <GridViewColumn Width="130" Header="Mobil"
                        DisplayMemberBinding="{Binding Path=Mobil}" />
                </GridView>
            </ListView.View>
        </ListView>
    

    ViewModel(更改值后需要刷新 var)

    [编辑] 否则您的视图将无法识别/显示任何内容 [编辑]

        private string _name = "";
        public string Name
        {
            get
            {
                return _name;
            }
            set
            _name = value;
                RaisePropertyChanged("Name");
            }
        }
    
    RaisePropertyChanged("Name");
    

    将刷新您的绑定。

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 2018-08-14
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 2019-07-13
      相关资源
      最近更新 更多