Zac*_*ach 23 wpf user-controls datatemplate
最近我试图在我的应用程序中重用一些UI元素.当我开始使用WPF编程时,我被告知DataTemplate是重用UI元素的最佳方式.您可以为数据实体定义模板并在任何地方使用它.听起来很不错.但是,我也发现了一些缺点,特别是在与UserControl进行比较时.
DataTemplate的另一个问题是您必须清楚DataTemplate实例本身与DataTemplate内容实例之间的区别.DataTemplate只有一个"DataTemplate实例",可能有许多DataTemplate内容实例.让我用一个例子解释一下:
<DataTemplate>
<DataTemplate.Resources>
<my:User x:key="User1"/>
</DataTemplate.Resources>
<Grid MouseLeftButtonDown="OnMouseLeftButtonDown">
<Grid.Resources>
<my:User x:key="User2"/>
</Grid.Resources>
</Grid>
</DataTemplate>
public partial class CodeBehind
{
Point mousePos = new Point();
private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
mousePos = e.Pos...;
}
}
Run Code Online (Sandbox Code Playgroud)结果是:User1将只有一个实例,但是,一旦应用DataTemplate,将创建User2实例,这意味着如果多次应用datatemplate,User2将有许多实例.但是,与UserControl不同,字段"mousePos"不会有很多副本.如果正在应用的DataTemplate 100次,mousePos结构不会有100份,这意味着100个电网将使用的唯一一个mousePos结构字段作为同一时间,这可能会导致问题.在UserControl中,您定义的字段仅由控件使用.100个UserControl实例将具有100个字段副本.
也许我以错误的方式使用DataTemplate.任何评论表示赞赏.
最好的祝福,
扎克
Bra*_*ham 28
从概念上讲,DataTemplates和UserControl解决了两个不同的问题.它们并不是真正可以互换的,因此您的比较并不准确.
DataTemplates都是关于将视觉样式应用于DataType.通常这意味着我有自己的.NET类叫做Foo,我想给它一个视觉风格.我会通过创建DataType为Foo的DataTemplate来实现这一点.
然后,我可以把这个DataTemplate中在我的应用程序(在App.xaml中说),我将应用到我的数据对象美孚我的视觉风格无论在何处使用.通常这意味着您将看到ContentControl,其Content属性绑定到Foo类型的属性.
另一方面的UserControls都是关于XAML的组织.用户控件有助于组织您希望在整个应用程序中重用的XAML块,这些块具有与之关联的行为和功能.这不仅仅是DataTempate的功能.
DataTemplate绑定到一个DataType并显示该类型的可视化.UserControl可以由多个DataType组成,并且可以包含自定义行为.
话虽这么说,我很少发现需要UserControl.我使用DataTemplates来模拟我的数据并通过数据绑定和MVVM模式实现我的行为.
Gro*_*kys 11
就个人而言,我创建一个UserControl,然后从中创建一个DataTemplate.这对我有好处:
归档时间: |
|
查看次数: |
12374 次 |
最近记录: |