0

実行時に Collection を Combobox にバインドしています。後で Index を 0 に設定したいと考えています。必要なものに対する直接的な答えが見つかりませんでした。

_stationNames = new ObservableCollection<string>(_floorUnits.Unit.Select(f => f.Name));
_stationNames.Insert(0, "All");
stationsComboBox.ItemsSource = _stationNames;
stationsComboBox.SelectedIndex = 0;//Doesn;t work

Xaml

<ComboBox x:Name="stationsComboBox" Grid.Row="1" Grid.Column="1" Text="{Binding Name}"
                  SelectionChanged="StationComboBoxSelectionChanged" VerticalAlignment="Center" Margin="3"
                   SelectedIndex="0"/>
4

1 に答える 1

1

WinFormsと同じように使用しようとしているようです。WPFはわずかに異なる獣であり、バインディングに関してはるかに強力です。

WPFを最大限に活用するには、MVVMについて少し読むことをお勧めします。XAMLをビューモデルクラスにバインドすることで(コードビハインドで接続しようとするのではなく)、大量のコードを使用せずに、はるかに柔軟に目的を達成できることがわかります。

例:次のVMがあるとします。

public class MyViewModel: INotifyPropertyChanged
{

    public ObservableCollection<string> StationNames
    {
        get;
        private set;
    }

    public Something()
    {
        StationNames = new ObservableCollection<string>( new [] {_floorUnits.Unit.Select(f=>f.Name)});
        StationNames.Insert(0, "All");
    }

    private string _selectedStationName = null;
    public string SelectedStationName
    {
        get
        {
            return _selectedStationName;
        }
        set
        {
            _selectedStationName = value;
            FirePropertyChanged("SelectedStationName");
        }
    }

    private void FirePropertyChanged(string propertyName)
    {
        if ( PropertyChanged != null )
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

ビューの(XAMLフォーム)DataContextをViewModelのインスタンスに設定し、コンボボックス定義を次のように更新できます。

<ComboBox x:Name="stationsComboBox" Grid.Row="1" Grid.Column="1"
                  ItemsSource="{Binding Path=StationNames}" SelectedItem={Binding Path=SelectedStationName} VerticalAlignment="Center" Margin="3"
                   SelectedIndex="0"/>

ここから、コンボボックスの選択が変更されるたびに、VMのSelectedStationNameが更新されて現在の選択が反映され、VMコードのどこからでも、VMのSelectedStationNameを設定するとコンボの選択が更新されます。(つまり、リセットボタンの実装など)

ただし、通常は、あなたが提案したようなものを使用して、Unitsコレクションに直接バインドすることを検討します。(または、ユニット自体を表示/編集できる場合は、ユニットから派生したVMです。)いずれの場合も、WPFバインディングの調査を開始するための出発点となるはずです。

于 2012-07-17T00:00:08.437 に答える