【问题标题】:How to populate a combobox with access using MVVM如何使用 MVVM 填充具有访问权限的组合框
【发布时间】:2015-05-19 20:03:48
【问题描述】:

我是 C# 新手,我正在尝试使用 MVVM 模式创建代码,但我不知道如何使用该模式填充组合框。请帮助我创建 ViewModel 并绑定到 xaml。

代码模型:

 public int Cd_Raca
    {
        get;
        set
        {
            if(Cd_Raca != value)
            {
                Cd_Raca = value;
                    RaisePropertyChanged("Cd_Raca");
            }
        }
    }

    public string Nm_Raca
    {
        get;
        set
        {
            if(Nm_Raca != value)
            {
                Nm_Raca = value;
                    RaisePropertyChanged("Nm_Raca");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string property)
    {
        if(PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }
}

Xaml:

<ComboBox x:Name="dsCmbRaca" HorizontalAlignment="Left" Margin="438,4,0,0"
                             VerticalAlignment="Top" Width="94" Height="19"/>

【问题讨论】:

    标签: c# wpf xaml mvvm combobox


    【解决方案1】:

    使用 ItemsSource 属性并将其设置为对象枚举。如果列表不只是字符串列表,您可以使用 DisplayMemberPath 将其设置为列表中单个对象的属性。
    IE。在我的示例中,列表的对象有一个用于显示的 Description 属性和一个用于所选值的 Value 属性。

    示例中的所有绑定都必须是您的 ViewModel (=DataContext) 中的属性。

    <ComboBox DisplayMemberPath="Description" HorizontalAlignment="Left" 
                      VerticalAlignment="Top" Width="120"
                      ItemsSource="{Binding myList}"
                      SelectedValue="{Binding mySelectedValue}" SelectedValuePath="Value" />  
    

    编辑:
    List 属性可能如下所示:

        public IList<MyObject> myList { get { return new List<MyObject>();} }
    

    例如,对象可能如下所示:

    public class MyObject
    {
        public string Description { get; }
        public enum Value { get;}
    }
    

    对象是可选的。你可以只传递一个字符串列表。

    免责声明:我在记事本中破解了这个。我希望它编译。

    更新
    至少从您发布的属性中查看您的代码没有正确实现。如果您像以前一样编写代码,则需要一个支持字段:

    private int _cd_Raca;
    private string _nm_Raca;
    
    public int Cd_Raca
        {
            get{ return _cd_Raca;}
            set
            {
                if(_cd_Raca != value)
                {
                    _cd_Raca = value;
                        RaisePropertyChanged("Cd_Raca");
                }
            }
        }
    
        public string Nm_Raca
        {
            get{return _nm_Raca;}
            set
            {
                if(_nm_Raca != value)
                {
                    _nm_Raca = value;
                        RaisePropertyChanged("Nm_Raca");
                }
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
        private void RaisePropertyChanged(string property)
        {
            if(PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
    

    阅读您对我的第一个答案的评论似乎您可能有一个特定的用例。因此,如果此更新没有帮助,也许您可​​以在您的问题中添加更多信息。

    【讨论】:

    • 我试图实现它但没有奏效。我想用 Access 数据库表填充组合框。 DisplayMember 需要为“Nm_Raca”,“ID”为“Cd_Raca”。
    • 如果它解决了您的问题,请查看我对答案的更新。如果没有,请为您的问题提供更多信息,以及在您尝试我的解决方案时您的问题到底是什么。
    • 我做到了,但问题是我不知道我在哪里连接到数据库
    • 对不起。有了数据库访问,我帮不了你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多