组合框选择改变了行为?

时间:2015-12-15 14:57:38

标签: c# wpf combobox

我正在开发一个WPF应用程序,其中我有ComboBox,就像这样

<ComboBox SelectedIndex="1" Grid.Column="2" Grid.Row="1" ItemsSource="{Binding VipCodes}" 
          SelectedItem="{Binding SelectedVipCode,Mode=OneWay}" Style="{StaticResource DefaultComboBoxStyle}" x:Name="vipCode" >
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Description}" />
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

在选择更改后加载页面后,我需要更新属性的值。

我确实喜欢连接选择更改事件并设置值。 但是当页面加载时,事件将触发并设置属性的值。

我怎么能绕过这个?

2 个答案:

答案 0 :(得分:0)

如果你绝对必须,只需设置一个全局变量。 var SkipOnce = true;然后在页面加载结束时将其设置为false。然后在你选择的更改事件中添加:if(SkipOnce == false){// do stuff}

答案 1 :(得分:0)

只有ViewModel才能在代码后面没有事件处理程序的情况下实现所描述的行为。如果将ComboBox的DataContext设置为查看模型,则以下代码将执行以下任务:

    public MainWindowViewModel()
    {
        for (int i = 0; i < 10; i++)
        {
            _vipCodes.Add(new VipCode() { Description = i.ToString() });
        }

        SelectedVipCode = _vipCodes[3];
    }

    private ObservableCollection<VipCode> _vipCodes = new ObservableCollection<VipCode>();


    public ObservableCollection<VipCode> VipCodes
    {
        get { return _vipCodes; }
    }

    private VipCode _selectedVipCode;
    public VipCode SelectedVipCode
    {
         get { return _selectedVipCode; }
        set
        {
            _selectedVipCode = value;
            OnPropertyChanged();
        }
    }


    protected void OnPropertyChanged([CallerMemberName] string property = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
    }