组合框刷新提供值''无法转换验证错误

时间:2013-09-06 17:48:50

标签: c# .net wpf

我是WPF的新手。我有一个带有多个标签的应用程序。在一个选项卡中,我可以将数据插入数据库中的表中。在另一个选项卡中,我有一个组合框,其中包含前面提到的表格的itemsource。当用户想要从组合框中选择时,我想更新组合框项目./

我尝试使用GotFocus属性,方法如下:

private void ComboBoxOperatingPoints_GotFocus_1(object sender, RoutedEventArgs e)
        {
            this.ThisViewModel.UpdateModel();
        }

Updatemodel函数包含以下内容:

this.OperatingPoints = new ObservableCollection<Operating_Point>(new OperatingPointRepository().GetAll());
            this.NotifyPropertyChanged("OperatingPoints");

XAML中的组合框结合:

<ComboBox SelectionChanged="ComboBoxOperatingPoints_SelectionChanged" 
                      x:Name="ComboBoxOperatingPoints" 
                      GotFocus="ComboBoxOperatingPoints_GotFocus_1"
                      FontSize="30" 
                      HorizontalAlignment="Right" 
                      Margin="40,40,0,0" 
                      VerticalAlignment="Top" 
                      Width="200" 
                      Height="50"
                      IsSynchronizedWithCurrentItem="True"
                      ItemsSource="{Binding OperatingPoints}"
                      DisplayMemberPath="name"
                      SelectedValue="{Binding OperatingPointID,UpdateSourceTrigger=PropertyChanged}"
                      SelectedValuePath="operating_point_id"
                      >

组合框刷新,但出现验证错误,在第一次发生GotFocus事件后我再也无法使用它了。 提前谢谢!

编辑:

最终我将GotFocus事件更改为DropDownOpened事件,并且工作正常。

1 个答案:

答案 0 :(得分:0)

您的代码在每次更新时都会创建一个新的ObservableCollection。您可能只想创建一次ObservableCollection,然后在UpdateModel中替换它的内容。因此,例如,在视图模型的构造函数中,实例化OperatingPoints集合:

public class MyViewModel {

    public MyViweModel() {
        this.OperatingPoints = new ObservableCollection<Operating_Point>();
    }
}

然后,在UpdateModel

public void UpdateModel() {
    this.OperatingPoints.Clear();

    foreach ( Operating_Point point in new OperatingPointRepository().GetAll() ) {
        this.OperatingPoints.Add(point);
    }
    NotifyPropertyChanged( "OperatingPoints" );
}