首页源码itemtemplate(什么是itemtemplate)

itemtemplate(什么是itemtemplate)

编程之家2024-04-0896次浏览

一、WPF怎么从后台页面替换前台页面的控件模板(ItemTemplate)

看得出你的意思,你使用了mvvm模式,然后希望在viewmodel内部切换前端的DataTemplate。因为viewmodel理论上是不引用前端的,所以你肯定无法访问前端任何一个DataTemplate。所以你可以这样做:

itemtemplate(什么是itemtemplate)

把你需要在ViewModel中切换的DataTemplate切换到程序的资源字典中,资源字典也就是wpf的ResourceDictionary,你的ViewModel是可以访问到的。

在ViewModel中设置一个String类型的属性,例如SelectedTemplate,用于之后的模板切换。

在你前端的ItemTemplate位置绑定这个SelectedTemplate属性,但你需要一个Converter来辅助样式的切换。

<ListBox ItemTemplate="{Binding Path=SelectedTemplate, Converter={StaticResource StringToDataTemplateConverter}}">

这个Converter你可以这么写:

publicclassStringToDataTemplateConverter:IValueConverter

itemtemplate(什么是itemtemplate)

{

publicobjectConvert(objectvalue,TypetargetType,objectparameter,CultureInfoculture)

{

returnInternalConvert(value,targetType,parameter);

}

publicobjectConvertBack(objectvalue,TypetargetType,objectparameter,CultureInfoculture)

itemtemplate(什么是itemtemplate)

{

thrownewNotImplementedException();

}

publicobjectInternalConvert(objectvalue,TypetargetType,objectparameter)

{

if(value==null)

{

returnnull;

}

varresources=Application.Current.Resources.MergedDictionaries.ToList();

foreach(vardictinresources)

{

foreach(varobjkeyindict.Keys)

{

if(objkey.ToString()==value.ToString())

{

returndict[objkey]asDataTemplate;

}

}

}

returnnull;

}

}这样一来前端的ItemTemplate就可以和ViewModel的SelectedTemplate完成绑定,你更改SelectedTemplate的值,你的Converter就会在资源字典中查找对应的DataTemplate了。

二、ASP.NET的ItemTemplate用法

在用DataList控件的时候肯定的要用到itemtemplate,现在我就跟大家怎么用它

第一步:先把DataList控件绑定数据库中的某个表,代码如下:

SqlConnection con= new SqlConnection("server=.; uid=sa; pwd=密码; database=数据库");

SqlDataAdapter sd= new SqlDataAdapter("select", con);

DataSet ds= new DataSet();

sd.Fill(ds,"LanMuName");

DataList1.DataSource= ds;

DataList1.DataBind();

第二步;再用itemtemplate绑定表里的某列,代码如下:

<asp:DataList ID="DataList1" runat="server" CellPadding="0">

<ItemTemplate>

<asp:Label ID="CaptionLabel" runat="server"

Text='<%# DataBinder.eval_r(Container.DataItem,"shipname")%>'>

</ItemTemplate>

</asp:DataList>

通过上面两步就可以实现绑定了,现在我为大家解释一下

DataBinder.eval_r(Container.DataItem,"shipname")里各项是什么意思:

DataBinder:数据绑定管理器

Eval:求值

Container:被绑定到的容器,比如GridView,DataList等

DataItem:容器的数据项,包括项、交替模板行

shipname:绑定到容器的字段(来自数据库表字段即表中的列)

三、datalist控件的Items属性是什么意思

Items介绍和作用

Items是DataGridItem的集合,可以遍历当前DataGrid中显示数据的DataGridItem。

5.1、DataGridItem

每一个DataGridItem就是DataGrid中显示的一行,其中包括:

Header DataGrid控件的标题部分

Item DataGrid控件中的项

AlternatingItem DataGrid控件中的交替项

SelectedItem DataGrid控件中的选定项(由SelectedIndex设置,通过SelectedItem属性或者Items[SelectedIndex]来读取)

EditItem DataGrid控件中处于编辑状态的项(由EditItemIndex设置,通过Items[EditItemIndex]来读取)

Separator DataGrid控件中项之间的分隔符

Footer DataGrid控件的脚注部分

Pager DataGrid控件的页选择节

注意,DataGrid的Items属性中不会包含Header、Footer、Pager这三类DataGridItem的。

5.1.1、DataGridItem的属性

ItemIndex——得到行在Items中的索引

ItemType——返回行的类型,也就是上面列出的Header、Item、...、Pager

Cells——返回行包含的所有TableCell(不管是显示声明的,还是自动生成的,不管是可以看见的,还是隐藏掉的),通过TableCell,可以读取Cell中显示的文本、包含的控件

严重注意:只有BoundColumn列和自动生成列,才可以通过TableCell.Text属性读取显示的文本。HyperLinkColumn、ButtonColumn、EditCommandColumn都需要将目标控件转换成相应的控件。

比如:

假设DataGrid的第一列声明如下

<asp:HyperLinkColumn DataTextField="au_id" HeaderText="au_id" DataNavigateUrlField="au_id" DataNavigateUrlFormatString="Edit.aspx?id={0}"></asp:HyperLinkColumn>

读取的时候可以用:

//Items[0]表示第一行,Cells[0]表示第一列,Controls[0]表示Cell中的第一个控件(也只有这个控件可以用)

HyperLink link=(HyperLink)DataGrid1.Items[0].Cells[0].Controls[0]);

Response.Write(link.Text);

至于模板列(TemplateColumn),当然也可以通过DataGrid1.Items[i].Cells[j].Controls[n]来获取,然后转换成原来的控件类型再操作,但是还有个更好的办法,就是用FindControl来查找控件。

FindControl是System.Web.UI.Control的方法,可以根据子控件ID来查找子控件

比如:

假设DataGrid的某一列声明如下

<asp:TemplateColumn>

<ItemTemplate>

<asp:TextBox Runat="server" ID="txtID" Text='<%# DataBinder.Eval(Container.DataItem,"au_id")%>'>

</asp:TextBox>

</ItemTemplate>

</asp:TemplateColumn>

读取方法:

TextBox txt=(TextBox)DataGrid1.Items[1].FindControl("txtID");

Response.Write(txt.Text);

注意:DataList中是没有Cell的

双卡双模双通是什么意思(双卡双模双通是什么意思)iphone信号图标修改(如何修改iPhone信号图标)