silverlight 动态添加 DataGridTemplateColumn 列

ajian24 2010-12-23 11:20:10
<data:DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
<data:DataGrid.Columns>

<data:DataGridTemplateColumn Header="City" SortMemberPath="CityInfo.CityName">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding CityInfo.CityName}" />
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
<data:DataGridTemplateColumn.CellEditingTemplate>

<DataTemplate>
<ComboBox ItemsSource="{Binding CityList, Source={StaticResource cityProvider}}"
SelectedItem="{Binding CityInfo, Mode=TwoWay}"
DisplayMemberPath="CityName"
src:ComboBoxService.ForceOpen="true"
/>
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>
</data:DataGridTemplateColumn>


</data:DataGrid.Columns>
</data:DataGrid>


这个是silverlight前台代码,本人要将data:DataGrid 中的data:DataGridTemplateColumn 控件内所有的内容在后台完成添加,请问怎么才能解决
...全文
744 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq24486838 2011-05-16
  • 打赏
  • 举报
回复
这样动态添加的控件,能挂接它的事件吗?
比如SelectionChanged="comboBox1_SelectionChanged"
ajian24 2010-12-23
  • 打赏
  • 举报
回复
现在只有datagrid控件
<data:DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
<data:DataGrid.Columns>
</data:DataGrid.Columns>
</data:DataGrid>

要在后台添加data:DataGridTemplateColumn 列及其所有内容
<data:DataGridTemplateColumn Header="City" SortMemberPath="CityInfo.CityName">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding CityInfo.CityName}" />
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
<data:DataGridTemplateColumn.CellEditingTemplate>

<DataTemplate>
<ComboBox ItemsSource="{Binding CityList, Source={StaticResource cityProvider}}"
SelectedItem="{Binding CityInfo, Mode=TwoWay}"
DisplayMemberPath="CityName"
src:ComboBoxService.ForceOpen="true"
/>
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>
</data:DataGridTemplateColumn>
ajian24 2010-12-23
  • 打赏
  • 举报
回复
对 我是新手,你还有别的办法么?
helloWorld1209 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ajian24 的回复:]
HTML code
textColumn.CellTemplate = this.CreatDataTemplate(typeof(TextBlock), bindDataName, bindColorName);

这条语句中的“CreatDataTemplate”是什么,那里来的?
我qq736822161 加我
[/Quote]

汗。。 CreatDataTemplate()是上面的方法,这句是调用这个方法。。。

你貌似是新手。
ajian24 2010-12-23
  • 打赏
  • 举报
回复
不是吧,我不太喜欢那种方法,认为吧字符串添加到前台使之变成控件是不太智能的一种做法。曾看到过用XamlReader.Load()来构建,但没能理解,望赐教。请将实例附上,最好是本题实例。谢谢
Sunpire 2010-12-23
  • 打赏
  • 举报
回复
楼主,你看清楚,2楼写的是一种方法,不是两种方法,CreatDataTemplate() 就是在你认为的第一种方法中定义的。
Sunpire 2010-12-23
  • 打赏
  • 举报
回复
在后台动态添加 DataGridTemplateColumn ,似乎只有使用
动态构造DataTemplate的Xaml字符串这一条较简单的路了,
顶2楼。

但是 XamlReader.Load() 似乎是在一个独立的空间中执行的,当前Xaml中所使用Resouces在
XamlReader.Load() 中是不能引用的(但Application级别的Resouces可以引用 ),
楼主如果想要使用 Source={StaticResource cityProvider} ,
那么就要像 2 楼中 <local:FontColorConverter x:Key='colorFormat'/> 一样,
把 cityProvider 也再声明一次。
ajian24 2010-12-23
  • 打赏
  • 举报
回复
textColumn.CellTemplate = this.CreatDataTemplate(typeof(TextBlock), bindDataName, bindColorName);

这条语句中的“CreatDataTemplate”是什么,那里来的?
我qq736822161 加我
ajian24 2010-12-23
  • 打赏
  • 举报
回复
combobox要绑定数据啊,难度要大些,我写不出来。
helloWorld1209 2010-12-23
  • 打赏
  • 举报
回复
不完整?你是说DataTemplate里的commbox没有?

参考我那个自己往上写啊。。。
ajian24 2010-12-23
  • 打赏
  • 举报
回复
我不想使用第一种方法,你的第二种发放还不够完整,能不能给出项DataGridTemplateColumn 中添加
 <data:DataGridTemplateColumn.CellEditingTemplate>

<DataTemplate>
<ComboBox ItemsSource="{Binding CityList, Source={StaticResource cityProvider}}"
SelectedItem="{Binding CityInfo, Mode=TwoWay}"
DisplayMemberPath="CityName"
src:ComboBoxService.ForceOpen="true"
/>
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>

的方法。
谢谢
helloWorld1209 2010-12-23
  • 打赏
  • 举报
回复
可以在后台创建DataTemplate xaml,动态的设置binding值。


public DataTemplate CreatDataTemplate(Type type, string bindDataName, string bindColorName)
{
StringBuilder sbTemp = new StringBuilder();

sbTemp.Append("<DataTemplate ");
sbTemp.Append("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ");
sbTemp.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
sbTemp.Append("xmlns:local='clr-namespace:PerfDashboard.BuildCompare;assembly=YourAssembly'>");

sbTemp.Append("<Grid>");
sbTemp.Append("<Grid.Resources>");
sbTemp.Append("<local:FontColorConverter x:Key='colorFormat'/>");
sbTemp.Append("</Grid.Resources>");

sbTemp.Append("<TextBlock Foreground=\"{Binding " + bindColorName + ", Converter={StaticResource colorFormat}}\" ");
sbTemp.Append("Text=\"{Binding " + bindDataName + "}\" ");
sbTemp.Append("HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>");

sbTemp.Append("</Grid>");
sbTemp.Append("</DataTemplate>");

return (DataTemplate)XamlReader.Load(sbTemp.ToString());
}



DataGridTemplateColumn textColumn = new DataGridTemplateColumn();
textColumn.Header = "Test1";
string bindDataName = string.Format("TestCaseValueList[{0}]", i);
string bindColorName = string.Format("TestCaseValueList[{0}].IsPassed", i);

textColumn.CellTemplate = this.CreatDataTemplate(typeof(TextBlock), bindDataName, bindColorName);


这是我项目中用到的,你参考下把

8,736

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧