我正在扩展一个控件,以便能够在我当前的Xamarin项目中重用它。作为此控件的一部分,我需要以编程方式创建DataTemplate。我已经找到了这个部分并且工作正常。
DataTemplate中有一个Label。我需要将Label的BindingContext属性绑定到{Binding Source}
。我需要将Label的Text属性绑定到{Binding Path=Name}
。
这适用于XAML,但我不想将其复制到代码库中的百万个不同位置。
<dxGrid:TemplateColumn FieldName="MyPropertyName"
Caption="MyColumn">
<dxGrid:TemplateColumn.DisplayTemplate>
<DataTemplate>
<Label BindingContext="{Binding Source}"
Text="{Binding Source, Path=MyPropertyName}" />
</DataTemplate>
</dxGrid:TemplateColumn.DisplayTemplate>
我的扩展控件现在看起来像这样:
public class MyColumn : TemplateColumn
{
public MyColumn()
{
DataTemplate displayTemplate = new DataTemplate(() =>
{
BindingBase textBinding = new Binding(FieldName);
Label label = new Label();
// TODO: Bind BindingContextProperty to {Binding Source}
//label.SetBinding(BindingContextProperty, binding);
label.SetBinding(Label.TextProperty, textBinding);
return new ViewCell
{
View = label
};
});
DisplayTemplate = displayTemplate;
}
}
我在绑定中被挂起,因为我不确定如何在代码中执行相当于{Binding Source}
的操作。任何帮助将不胜感激。
答案 0 :(得分:1)
@Eugene - 感谢您的回复。不幸的是,这不起作用并且绑定到&#34; Source&#34;像那样抛出一个空参考例外。今天早上我再次通过它并以此方式工作:
public MyColumn()
{
DataTemplate displayTemplate = new DataTemplate(() =>
{
Grid grid = new Grid();
grid.SetBinding(Grid.BindingContextProperty, "Source");
Label label = new Label();
label.SetBinding(Label.TextProperty,FieldName);
grid.Children.Add(label);
return grid;
});
this.DisplayTemplate = displayTemplate;
}
答案 1 :(得分:0)
很简单,使用属性名称
label.SetBinding(BindingContextProperty, "Source");