Ada*_*kis 5 silverlight wpf binding
假设我正在从我的数据服务中读取一些书籍对象,并使用每个结果创建一个ViewModel,以便在ListBox或DataGrid中显示.
public class BookViewModel {
public BookViewModel(DataService.BookResult B) {
this.CurrentBook = B;
//other details elided
}
Run Code Online (Sandbox Code Playgroud)
如果此ViewModel具有许多与数据服务中的book对象完全相同的属性,是否有任何理由将所有需要的属性从DataService.BookResult复制到ViewModel,或者是否可以存储Dataservice .BookResult对象,并通过它绑定:
<sdk:DataGridTemplateColumn SortMemberPath="CurrentBook.Title" Header="Title" Width="430">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Margin="5,0,0,0" Text="{Binding CurrentBook.Title}" ToolTipService.ToolTip="{Binding CurrentBook.Title}"></TextBlock>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn Header="Publisher" Width="150">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid VerticalAlignment="Center" Margin="7,0,0,0">
<TextBlock x:Name="publisherText" Visibility="{Binding CurrentBook.Publisher, Converter={StaticResource hasValueConverter}}" Text="{Binding CurrentBook.Publisher}" ToolTipService.ToolTip="{Binding CurrentBook.Publisher}" />
<TextBlock Visibility="{Binding Visibility, ElementName=publisherText, Converter={StaticResource visibilityInverter}}" Style="{StaticResource textForNoData}">No Publisher Info</TextBlock>
</Grid>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
我知道这违反了Demeter法则,我应该只列出所有属性,并让ValueInjecter在工厂方法中执行属性映射细节,但由于这是一个非常小的项目,所以对数据服务的更改是不太可能的,这种变化的足迹相对较小,是否有任何Silverlight/WPF特定的原因,为什么这可能或可能不是一个好主意?
德米特法则限制方法的使用,而不是属性的使用。对对象模型中属性的只读访问不会违反它。
我根本不担心这一点,只要您只进行单向绑定并且不需要属性更改通知。但是在您看来查找有关数据元素的描述性信息呢?我不认为这有什么问题。
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |