我有一个使用MVVM模式的WPF应用程序和正在访问MSSQL服务器的MVVM Light Tookkit。下面是一个示例数据库(我拥有的数据库更复杂):
Employee Table:
|Name | ShipToLocation
---------------|--------------------
|John | 1
ShipToLocation Table:
|Code | CityName
------|------------------
| 1 | New York
我使用EntityFramwork从我的数据库表中创建对象。我遇到的问题是我的程序现在,我不得不使用很多像这样的IValueConverters:
<ListBox Grid.Row="1" Grid.ColumnSpan="3" ItemsSource="{Binding Employees}" HorizontalContentAlignment="Stretch" SelectedItem="{Binding ThisEmployee}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Center">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource IntToShipTo}">
<Binding Path="VendorCode" Mode="OneWay"/>
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}" Path="DataContext.ShipToLocations"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在我的ViewModel中,有一个名为Employees的属性,它包含一个Emplyoyee列表,以及一个名为ShipToLocations的属性,该属性包含所有Ship To Locations的列表。我必须使用RelativeSource才能访问ShipToLocations属性,因为ListBox的ItemSource设置为“Employees”,这会导致设计时查看问题
我在很多地方都有这种连接,我需要为每个连接器制作一个转换器。这似乎有很多开销,也是单元测试的噩梦。
我想知道的是,在我的员工表中添加一个名为ShipToFriendlyName的列,然后在ShipToLocation字段上附加一个触发器,在更改int时更新frienldy名称是不好的做法。这样就可以避免在每次需要找出Integer的友好名称时进行数据库调用。谢谢
答案 0 :(得分:1)
我想知道的是,这是不好的做法......
是的,那将是非常糟糕的做法。