Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin形成XAML:另一个绑定语法问题_C#_Xaml_Xamarin.forms_Data Binding - Fatal编程技术网

C# Xamarin形成XAML:另一个绑定语法问题

C# Xamarin形成XAML:另一个绑定语法问题,c#,xaml,xamarin.forms,data-binding,C#,Xaml,Xamarin.forms,Data Binding,在我的Xamarin Forms项目中,我使用以下代码在设计时向xaml previewer提供模拟数据: C#: 这在运行时有效,但在设计时无效:“{x:Static data:StaticData.MockData.SingleObj}”未被识别为有效表达式 我能使其在设计时和运行时都工作的唯一方法是: <ContentPage xmlns:data="clr-namespace:MyApp.Data" BindingContext="{x:Static da

在我的Xamarin Forms项目中,我使用以下代码在设计时向xaml previewer提供模拟数据:

C#:

这在运行时有效,但在设计时无效:“
{x:Static data:StaticData.MockData.SingleObj}
”未被识别为有效表达式

我能使其在设计时和运行时都工作的唯一方法是:

<ContentPage xmlns:data="clr-namespace:MyApp.Data"
             BindingContext="{x:Static data:StaticData.MockData}"
             ... >

<StackLayout x:Name="MyStackLayout" BindingContext="{Binding SingleObj}">
    <Label Text="{Binding P1}" />
    <Label Text="{Binding P2}" />
</StackLayout>
这样我就有了一个StackLayout(仅用于绑定目的),其BindingContext在设计时是MockData的属性,在运行时是实际对象


我想知道是否有一种语法可以直接在ContentPage BindingContext中指定SingleObj,从而避免将所有内容都放在容器布局中。

SingleObj
添加到绑定路径表达式中

<ContentPage xmlns:data="clr-namespace:MyApp.Data"
             BindingContext="{x:Static data:StaticData.ViewModel}"
             ... >

<StackLayout>
    <Label Text="{Binding SingleObj.P1}" />
    <Label Text="{Binding SingleObj.P2}" />
</StackLayout>


这将在设计时起作用,但如何对其进行编码以在运行时显示实时数据?对于StackLayout,我执行“var actualObj=GetDataFromDB();MyStackLayout.BindingSource=actualObj;”。这在您的方法中是不可能的…不要将BindingContext分配给StackLayout,让它继承页面的上下文,一切都应该正常。抱歉,但我不明白如何在运行时设置实际源…
This.BindingContext=new DataViewModel()我知道我对代码工作原理的解释不是很清楚。我重写了这个问题,希望能说清楚。我,你解决了吗?ViewModel在设计时和运行时的效果不同。通常,运行时性能更好。
var actualListData = GetDataFromDB(); // obj returned is of type List<MyObj>
MyList.ItemsSource = actualListData;
<ContentPage xmlns:data="clr-namespace:MyApp.Data"
             BindingContext="{x:Static data:StaticData.MockData.SingleObj}"
             ... >

<Label Text="{Binding P1}" />
<Label Text="{Binding P2}" />
var actualObj = GetDataFromDB(); // obj returned is of type MyObj
this.BindingSource = actualObj;
<ContentPage xmlns:data="clr-namespace:MyApp.Data"
             BindingContext="{x:Static data:StaticData.MockData}"
             ... >

<StackLayout x:Name="MyStackLayout" BindingContext="{Binding SingleObj}">
    <Label Text="{Binding P1}" />
    <Label Text="{Binding P2}" />
</StackLayout>
var actualObj = GetDataFromDB(); // obj returned is of type MyObj
MyStackLayout.BindingContext = actualObj;    
<ContentPage xmlns:data="clr-namespace:MyApp.Data"
             BindingContext="{x:Static data:StaticData.ViewModel}"
             ... >

<StackLayout>
    <Label Text="{Binding SingleObj.P1}" />
    <Label Text="{Binding SingleObj.P2}" />
</StackLayout>