Silverlight/WPF视图模型最佳实践

5
假设我正在从我的数据服务中读取一些书籍对象,并使用每个结果来创建一个ViewModel,以便在ListBox或DataGrid中进行显示。
public class BookViewModel {
    public BookViewModel(DataService.BookResult B) {
        this.CurrentBook = B;

        //other details elided
    }

如果此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>

我知道这违反了迪米特法则,而且我应该列出所有属性,然后在工厂方法中使用ValueInjecter进行属性映射细节处理,但由于这是一个相当小的项目,数据服务更改的可能性很小,而且这种更改的影响范围相对较小,所以是否有任何Silverlight/WPF特定的原因来判断这是否是个好主意?

1个回答

3

迪米特法则限制方法的使用,而不是属性。在您的对象模型中只读访问属性并不违反它。

只要您只进行单向绑定且不需要属性更改通知,我不会担心这个问题。但是在您的视图中查找有关数据元素的描述信息?我认为这没有问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接