1

私はMVVMが初めてで、作業中のプログラムをMVVMプログラムに変換しようとしています。私はこれに対する答えを探していましたが、これまでのところ運がありませんでした.

基本的に私が持っているのはこれです:リストボックスとリストビュー。リストボックスには駅がいっぱいで、駅からの時間をリストビューで表示したい(遅延など)。リストボックスにはステーションがいっぱいで、ステーションを選択するたびにステーションが更新され、'CurrentStation' という変数に保存されます。現在、この「CurrentStation」を使用して、そのステーションからのすべての出発の ObservableCollection リストを取得していますが、何らかの理由で、この関数は 1 回しか呼び出されず、別のステーションを選択しても更新されません。

また、xaml コードで何をバインドすればよいかわかりません。

<ListBox x:Name="lstStations" Margin="8" Grid.Row="1" ItemsSource="{Binding StationList}" SelectedItem="{Binding CurrentStation}" DisplayMemberPath="Name"/>
        <ListView Grid.Column="1" Margin="8" Grid.Row="1" ItemsSource="{Binding Departures}" >
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Time, StringFormat=t}" Header="Time" />
                    <GridViewColumn DisplayMemberBinding="{Binding Delay, Converter={StaticResource mijnDelayConverter}}" Header="Delay"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Station}" Header="Station"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Vehicle}" Header="Vehicle"/>
                    <GridViewColumn Header="Platform" CellTemplate="{DynamicResource dataTemplateTextblock}" />
<!-- Haven't had the chance to look at this ^ I don't think this is correct though -->
                    </GridView>
                </ListView.View>
            </ListView>

ViewModel コードは次のとおりです。

        public string Name
        {
            get
            {
                return "MainPage"; 
            }
        }
        public ObservableCollection<Station> StationList
        {
            get
            {
                return Station.GetStations();
            }
        }
        private Station _currentStation;
        public Station CurrentStation
        {
            get
            {
                return _currentStation;
            }
            set
            {
                _currentStation = value;
                Console.WriteLine("New station selected: " + _currentStation.ToString());
                OnPropertyChanged("CurrentStation");
            }
        }
        private ObservableCollection<Departure> _departures;
        public ObservableCollection<Departure> Departures
        {
            get
            {
                return Departure.GetDepartures(CurrentStation);
            }
            set
            {
                _departures = value;
            }
        }
4

2 に答える 2

3

私はあなたがする必要があると思います:

  • プロパティを明示的に更新します。セッターDepartures内で実行できますCurrentStation

    private Station _currentStation;
    public Station CurrentStation
    {
        get
        {
            return _currentStation;
        }
        set
        {
            _currentStation = value;
            Departures = Departure.GetDepartures(_currentStation);
            Console.WriteLine("New station selected: " + _currentStation.ToString());
            OnPropertyChanged("CurrentStation");
        }
    }
    
  • 変更通知をトリガーして、有名なOnPropertyChanged

    private ObservableCollection<Departure> _departures;
    public ObservableCollection<Departure> Departures
    {
        get
        {
            return _departures
        }
        set
        {
            _departures = value;
            OnPropertyChanged("Departures");
        }
    }
    
于 2013-10-24T22:42:36.897 に答える