将数据绑定到WPF中的组合框

时间:2013-05-04 11:51:27

标签: wpf binding frameworks combobox entity

我是编程的初学者,尤其是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未显示任何数据。在设置类之前由实体框架生成。现在,我做了自己的课程设置。这个班应该实现什么?你能救我吗?

1 个答案:

答案 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控件。

希望这会对你有所帮助。