2

さまざまな色の車で駐車場(私のお気に入りの例え)を表示するUserControlがあると想像してください。車を選択すると、別のUserControl(別のプロジェクト)に、選択した車の統計が表示されます。

ここで、ユーザーは車の統計UC、「同じ色の次の車」のボタンを必要としています。選択すると、同じ色で駐車場の次の車の統計(上から下、左から右)が表示されます。

それで、それが理にかなっているなら、質問に移りましょう。

現在、MVVM Liteを使用して、選択した車を含むメッセージを駐車場UCから車統計UCに送信しています。すべてが良いです。しかし、この新機能のリクエストでは、どうすればよいですか?統計UCは、駐車場UCに次の車を要求する必要があります。

これは、依存性注入を使用するのに適した場所でしょうか?それとも別のより良いアプローチがありますか?

4

2 に答える 2

1

私があなたを正しければ、あなたが望むのは適切な CommandParameters を持つコマンドです。

  public class Car
  {
    public Car(ParkingLot lot)
    {
        _parkingLot = lot;
    }

    public string Color { get; set; }

    public ParkingLot ParkingLot
    {
        get
        {
            return _parkingLot;
        }
    }

    private ParkingLot _parkingLot;
}

public class ParkingLot : ObservableCollection<Car>
{
    public Car SelectedCar { get; set; }

    public ICommand ShowNextCarCommand {
        get
        {
            if (_showNextCar == null)
            {
                _showNextCar = new DelegateCommand(OnShowNextCar);
            }

            return _showNextCar;
        }
    }

    private void OnShowNextCar()
    {
        string currentColor = SelectedCar.Color;
        //Write proper logic to get the next Car. Here you got the currently selected car with you and the color
        SelectedCar = this.NEXT(s => s.Color == currentColor); //Write the NEXT() logic           
    }

    ICommand _showNextCar;
}

Button.Command="{Binding ParkingLot.ShowNextCarCommand}" を設定するだけで、ParkingLot ビューモデル クラスを制御し、次の同じ色の車を見つけて、SelectedCar プロパティに再度設定します。これらすべてのプロパティに RaisepropertyChanged があると思います。PrismのシンプルなDelegateCommandを使っています

于 2010-02-11T01:51:56.863 に答える
0

コントローラーを 2 つの ViewModel (ParkingLotViewModel と StatisticsViewModel) の間のメディエーターとして使用します。あなたの場合、コントローラーは選択した車を同期する責任があり、「同じ色の次の車を選択する」コマンドをParkingLotViewModelに渡す責任があります。

WPF アプリケーション フレームワーク (WAF)のサンプル アプリケーションは、これがどのように機能するかを示しています。

.

jbe

于 2010-02-14T16:54:18.637 に答える