Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据绑定到WPF中的组合框_Wpf_Binding_Frameworks_Combobox_Entity - Fatal编程技术网

将数据绑定到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

希望这对你有帮助