我正在努力使用Xamarin Forms中的数据绑定。这就是为什么,我期望从以下XAML声明中发生的事情:
IsVisible="{Binding Path=UserContext.IsLoggedOut}"
是 - 该属性绑定到View Model的子对象。现在要么Xamarin Forms不支持,要么我错过了一个技巧。
如果Xamarin不支持WPF中支持它,那么我们应该做些什么来传播嵌套对象?展平视图模型正在让我编写大量代码和大量代码。
答案 0 :(得分:16)
支持嵌套属性,就像其他非常复杂的表达式一样:
你可以测试一下:
<强>的Xaml 强>
<StackLayout Spacing="20">
<StackLayout Orientation="Horizontal">
<Label Text="Subproperties: " HorizontalOptions="FillAndExpand" FontSize="15"></Label>
<Label Text="{Binding Item.SubItem.Text}" HorizontalOptions="FillAndExpand" FontSize="15"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="Indexer: " HorizontalOptions="FillAndExpand" FontSize="15"></Label>
<Label Text="{Binding Item.Dictionary[key].Text}" HorizontalOptions="FillAndExpand" FontSize="15"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="Array Indexer: " HorizontalOptions="FillAndExpand" FontSize="15"></Label>
<Label Text="{Binding Item.Array[1].Text}" HorizontalOptions="FillAndExpand" FontSize="15"></Label>
</StackLayout>
</StackLayout>
网页强>
public partial class Page2 : ContentPage
{
public ItemModel Item { get; }
public Page2()
{
InitializeComponent();
Item = new ItemModel();
BindingContext = this;
}
}
public class ItemModel
{
public ItemSubModel SubItem { get; set; }
public Dictionary<string, ItemSubModel> Dictionary { get; set; }
public ItemSubModel[] Array { get; set; }
public ItemModel()
{
SubItem = new ItemSubModel();
Dictionary = new Dictionary<string, ItemSubModel>
{
{"key", new ItemSubModel()}
};
Array = new [] {new ItemSubModel(), new ItemSubModel() };
}
}
public class ItemSubModel
{
public string Text { get; set; } = "Supported";
}
<强>结果强>
答案 1 :(得分:0)
我假设你正在尝试使用Xaml。尝试删除“路径”。
IsVisible="{Binding UserContext.IsLoggedOut}"
但更重要的是,你的BindingContext
是什么?要使上述代码生效,您需要将BindingContext
设置为类Foo
,该类具有名为UserContext
的属性,该属性本身具有属性IsLoggedOut
。
还要看看here