我是编程的初学者,尤其是WPF
。我在WPF
有一个申请。我已将.sdf
数据库的连接从Entity Framework
更改为SqlCeCommand
。不幸的是,在此之前,我有以下代码来绑定ComboBox
。
<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<Setting> _settings;
Settings = new CollectionView(_settings);
它有效。更改与DataBase
的连接后没有错误,但ComboBox
未显示任何数据。在设置类之前由实体框架生成。现在,我做了自己的课程设置。这个班应该实现什么?你能救我吗?
答案 0 :(得分:1)
如果您觉得有帮助,请投票给我答案。
根据我的理解,如果您使用Setting作为数据对象,则需要将其存储到ObservableCollection&lt;&gt;中。使用方式如下:
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.
}
}
如果要实现自己的Setting类,则应实现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
}
上面的实现为您提供了一个方法OnPropertyChanged(string propertyName)。您需要在班级中每个属性的“set”部分调用此方法。每当属性值发生变化时,它都会通知DependencyProperty控件。
希望这会对你有所帮助。