Xamarin 为什么在我的ViewModel上找不到Binding ItemSource属性?

Xamarin 为什么在我的ViewModel上找不到Binding ItemSource属性?,xamarin,xamarin.forms,data-binding,Xamarin,Xamarin.forms,Data Binding,我有Xamarin表单应用程序来显示一副卡片。Deck由App类中的静态集合初始化。(断点显示它已填充)。MainPage将MainPageViewModel设置为绑定上下文: Public MainPage(){ InitilizeComponent(); BindingContext = new MainPageViewModel() } MainPageViewModel有一个简单的属性来检索填充的Deck.Cards: 公共静态IEnumerable卡{get{retu

我有Xamarin表单应用程序来显示一副卡片。
Deck
App
类中的静态集合初始化。(断点显示它已填充)。
MainPage
MainPageViewModel
设置为绑定上下文:

Public MainPage(){
    InitilizeComponent();
    BindingContext = new MainPageViewModel()
}
MainPageViewModel
有一个简单的属性来检索填充的
Deck.Cards

公共静态IEnumerable卡{get{return Deck.Cards;}}

这在主页的旋转木马集合中使用

然而,视图是空的!我明白了

`[0:]绑定:在“mypackage.ViewModels.MainPageViewModel”的目标属性“Xamarin.Forms.CarouseView.ItemsSource”中未找到“Cards”属性。

为什么找不到财产?它是公共的、可数的。

更改此选项:

public static IEnumerable<Card> Cards { get { return Deck.Cards; }}
公共静态IEnumerable卡{get{return Deck.Cards;}
为此:

public ObservableCollection<Card> Cards{ get {return new ObservableCollection<Card>(Deck.Cards.ToList()); }}
公共ObservableCollection卡{get{返回新的ObservableCollection(Deck.Cards.ToList());}
希望这有帮助。

更改此选项:

public static IEnumerable<Card> Cards { get { return Deck.Cards; }}
公共静态IEnumerable卡{get{return Deck.Cards;}
为此:

public ObservableCollection<Card> Cards{ get {return new ObservableCollection<Card>(Deck.Cards.ToList()); }}
公共ObservableCollection卡{get{返回新的ObservableCollection(Deck.Cards.ToList());}

希望这能有所帮助。

假设您的Xaml当前有
ItemsSource={Binding Cards}
,然后使卡片成为非静态的,它就会工作

如果要将卡保留为静态属性,请使用x:static:

ItemsSource={x:Static vm:MainPageViewModel.Cards}


并确保在Xaml文件的顶部声明名称空间:
xmlns:vm=“clr namespace:mypackage.ViewModels”

假设Xaml当前有
ItemsSource={Binding Cards}
,然后使卡成为非静态卡,它就会工作

如果要将卡保留为静态属性,请使用x:static:

ItemsSource={x:Static vm:MainPageViewModel.Cards}


并确保在Xaml文件的顶部声明名称空间:
xmlns:vm=“clr namespace:mypackage.ViewModels”

Ah!原来的问题有一个致命的错误。该属性在MainPageViewModel上定义。很抱歉是定义中的x:Static属性修复了它(请参阅接受的答案),但投票支持了这一点-如果需要通知更改,集合应该是可观察的。啊!原来的问题有一个致命的错误。该属性在MainPageViewModel上定义。很抱歉是定义中的x:Static属性修复了它(请参见接受的答案),但投票支持了这一点——如果需要通知更改,则集合应该是可观察的。