我是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事件,并且工作正常。
答案 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" );
}