gpt4 book ai didi

wpf - Silverlight/WPF Viewmodel 最佳实践

转载 作者:行者123 更新时间:2023-12-04 20:54:52 27 4
gpt4 key购买 nike

假设我正在从我的数据服务中读取一些书籍对象,并使用每个结果创建一个 ViewModel 以在 ListBox 或 DataGrid 中显示。

public class BookViewModel {
public BookViewModel(DataService.BookResult B) {
this.CurrentBook = B;

//other details elided
}

如果此 ViewModel 与数据服务中的 book 对象具有许多完全相同的属性,是否有充分的理由将 DataService.BookResult 中的所有所需属性复制到 ViewModel,或者只存储 Dataservice 是否可以.BookResult 对象,并通过它绑定(bind):
            <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 特定的原因为什么这可能不是一个好主意?

最佳答案

得墨忒耳法则限制了方法的使用,而不是属性。对对象模型中的属性的只读访问不会违反它。

只要您只进行单向绑定(bind)并且不需要属性更改通知,我根本不会担心这一点。但是在您的 View 中查找有关数据元素的描述性信息?我看不出这有什么问题。

关于wpf - Silverlight/WPF Viewmodel 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5679241/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com