将数据绑定到WPF中的组合框
我是编程初学者,尤其是将数据绑定到WPF中的组合框,wpf,binding,frameworks,combobox,entity,Wpf,Binding,Frameworks,Combobox,Entity,我是编程初学者,尤其是WPF。我在WPF中有一个应用程序。我已将到.sdf数据库的连接从实体框架更改为SqlCeCommand。不幸的是,在此之前,我有以下用于绑定组合框的代码 <DockPanel Grid.Row="4"> <Button x:Name="LoadButton" Height="20" ToolTip="Choose setting name to load" Width="75" Padding="2,2,2,2" Margin="2,0,2
WPF
。我在WPF
中有一个应用程序。我已将到.sdf
数据库的连接从实体框架
更改为SqlCeCommand
。不幸的是,在此之前,我有以下用于绑定组合框的代码
<DockPanel Grid.Row="4">
<Button x:Name="LoadButton" Height="20" ToolTip="Choose setting name to load" Width="75" Padding="2,2,2,2" Margin="2,0,2,0" HorizontalAlignment="Left" VerticalAlignment="Center" Content="Load Settings" Command="{Binding LoadSettingsCommand}"/>
<ComboBox x:Name="LoadSettingsComboBox" ToolTip="Choose setting name to load" ItemsSource="{Binding Mode=OneWay, Path=Settings/}" SelectedValue="{Binding LoadSettingName, Mode=OneWayToSource}" SelectedValuePath="Name" Grid.Column="1" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Center" Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DockPanel>
以及:
List\u设置;
设置=新集合视图(\u设置);
它成功了。更改到
数据库的连接后
没有错误,但组合框
不显示任何数据。在设置之前,类是由实体框架生成的。现在,我做了自己的课堂设置。这个类应该实现什么?你能帮我吗?如果你觉得这个答案有帮助,请投票表决
根据我的理解,如果您使用设置作为数据对象,则需要将其存储到ObservableCollection中。这样使用:
private ObservableCollection<Settings> _settingList = new ObservableCollection<Settings>();
public ObservableCollection<Settings> SettingList
{
get
{
return this._settingList;
}
set
{
if(value==null)
return;
this._settingList = value;
//OnPropertyChanged(()=>this.SettingList); //It is not required as ObservableCollection<> itself notifies on collection changed.
}
}
private ObservableCollection_settingList=new ObservableCollection();
公共可观察收集设置列表
{
得到
{
返回此。\u设置列表;
}
设置
{
如果(值==null)
返回;
此值为。_settingList=值;
//OnPropertyChanged(()=>this.SettingList);//它不是必需的,因为ObservableCollection本身在集合更改时通知。
}
}
如果您正在实现自己的设置类,那么您应该实现INotifyPropertyChanged接口,以将属性与combobox项绑定。以下代码供您参考:
public class SettingsModel : INotifyPropertyChanged
{
#region INotifyPropertyChanded event Implementation
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged<TProperty>(Expression<Func<TProperty>> propertyExpression)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null == handler)
return;
if (null != propertyExpression)
{
var e = new PropertyChangedEventArgs(((MemberExpression)propertyExpression.Body).Member.Name);
handler(this, e);
}
}
public void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != PropertyChanged)
handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
公共类设置模型:INotifyPropertyChanged
{
#区域INotifyPropertyHanded事件实现
公共事件属性更改事件处理程序属性更改;
公共void OnPropertyChanged(表达式propertyExpression)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(null==处理程序)
返回;
if(null!=propertyExpression)
{
var e=新的PropertyChangedEventArgs(((MemberExpression)propertyExpression.Body).Member.Name);
处理者(本,e);
}
}
公共void OnPropertyChanged(字符串propertyName)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
如果(null!=属性更改)
处理程序(这是新的PropertyChangedEventArgs(propertyName));
}
#端区
}
上面的实现为您提供了一个OnPropertyChanged(string propertyName)方法。您需要在类中每个属性的“set”部分调用此方法。每当属性值发生更改时,它都会通知控件的DependencyProperty
希望这会对你有所帮助。如果你觉得这个答案有帮助,请投票 根据我的理解,如果您使用设置作为数据对象,则需要将其存储到ObservableCollection中。这样使用:
private ObservableCollection<Settings> _settingList = new ObservableCollection<Settings>();
public ObservableCollection<Settings> SettingList
{
get
{
return this._settingList;
}
set
{
if(value==null)
return;
this._settingList = value;
//OnPropertyChanged(()=>this.SettingList); //It is not required as ObservableCollection<> itself notifies on collection changed.
}
}
private ObservableCollection_settingList=new ObservableCollection();
公共可观察收集设置列表
{
得到
{
返回此。\u设置列表;
}
设置
{
如果(值==null)
返回;
此值为。_settingList=值;
//OnPropertyChanged(()=>this.SettingList);//它不是必需的,因为ObservableCollection本身在集合更改时通知。
}
}
如果您正在实现自己的设置类,那么您应该实现INotifyPropertyChanged接口,以将属性与combobox项绑定。以下代码供您参考:
public class SettingsModel : INotifyPropertyChanged
{
#region INotifyPropertyChanded event Implementation
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged<TProperty>(Expression<Func<TProperty>> propertyExpression)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null == handler)
return;
if (null != propertyExpression)
{
var e = new PropertyChangedEventArgs(((MemberExpression)propertyExpression.Body).Member.Name);
handler(this, e);
}
}
public void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != PropertyChanged)
handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
公共类设置模型:INotifyPropertyChanged
{
#区域INotifyPropertyHanded事件实现
公共事件属性更改事件处理程序属性更改;
公共void OnPropertyChanged(表达式propertyExpression)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(null==处理程序)
返回;
if(null!=propertyExpression)
{
var e=新的PropertyChangedEventArgs(((MemberExpression)propertyExpression.Body).Member.Name);
处理者(本,e);
}
}
公共void OnPropertyChanged(字符串propertyName)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
如果(null!=属性更改)
处理程序(这是新的PropertyChangedEventArgs(propertyName));
}
#端区
}
上面的实现为您提供了一个OnPropertyChanged(string propertyName)方法。您需要在类中每个属性的“set”部分调用此方法。每当属性值发生更改时,它都会通知控件的DependencyProperty
希望这对你有帮助