我有一个ItemsControl
,其中DataTemplate
描述了如何显示每个项目。我想在DataTemplate中使用的UI是bad fit to be modelled by XAML,我将不得不在代码中填充Grid
。
每次实例化DataTemplate
时,如何运行此代码,以便我有机会填充我在XAML中无法表达的位?
为了扩展一点,请考虑一个简化的例子。 VM看起来像这样:
class MyItem
{
public string Name { get; set; }
public MyGrid Grid { get; set; } // describes a complex grid-like model
}
DataTemplate
看起来像这样:
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
<Grid/>
</DataTemplate>
<Grid/>
是基于MyItem.Grid
在代码中填充的内容。我怎么能这样做?
(如果您要说我不应该在代码中填充<Grid/>
但只使用XAML,请回答this question而不是
答案 0 :(得分:2)
您可以轻松地将Loaded
事件挂钩到Grid
。
<Grid Loaded="Grid_Loaded">
private void Grid_Loaded(object sender, ....)
{
var grid = (Grid)sender;
var item = (MyItem)grid.DataContext;
//Go time
}