0

MSSQL サーバーにアクセスしている MVVM パターンと MVVM Light Toolkit を使用する WPF アプリケーションがあります。以下はサンプルデータベースです(私が持っているデータベースはより複雑です):

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には、Emplyoyeeのリストを保持するEmployeesというプロパティと、すべてのShip To Locationsのリストを持つShipToLocationsというプロパティがあります。ListBox の ItemSource が「Employees」に設定されているため、ShipToLocations プロパティにアクセスするには RelativeSource を使用する必要があり、これが設計時のビューの問題を引き起こしています。

この種のリンクは多くの場所で行われており、それぞれにコンバーターを作成する必要があります。これはオーバーヘッドが大きく、単体テストの悪夢のようです。

私が疑問に思っていたのは、従業員テーブルに ShipToFriendlyName という列を追加し、int が変更されたときにフレンド名を更新するトリガーを ShipToLocation フィールドにアタッチするのは悪い習慣ではないかということでした。これにより、整数のフレンドリ名を調べる必要があるたびにデータベース呼び出しを行う必要がなくなります。ありがとうございました

4

1 に答える 1

1

私が思っていたのは、それは悪い習慣でしょうか...

はい、それは非常に悪い習慣です。

于 2013-09-17T18:56:17.757 に答える