首页 文章

WPF组合框和数据绑定到其他类

提问于
浏览
1

所有,

我真的陷入了一个非常基本的概念 - 我找不到我真正理解的答案 .

我有一个视图 - viewContacts . 它的datacontext是一个viewmodel - viewmodelContacts .

在视图中我有' Headers '的组合框(你知道......先生,夫人,小姐等) . 我想绑定itemssource,以便显示一个选项列表,并绑定SelectedValue,以便将密钥存储在viewmodelContacts TitleId属性中 .

'source'列表,如果 Headers (我想将ItemsSource绑定到)实际上是在一个单独的静态类中 - 请注意不是viewmodel!

internal static class Titles
{
    static IList<Title> _colTitles = null;
    static Titles()
    {
        _colTitles = new List<Title>();
        _colTitles.Add(new Title() { TitleId = 1, Description = "Mr." });
        _colTitles.Add(new Title() { TitleId = 2, Description = "Mrs." });
        _colTitles.Add(new Title() { TitleId = 3, Description = "Miss." });
        _colTitles.Add(new Title() { TitleId = 4, Description = "Ms." });
    }

    internal static IList<Title> GetTitles()
    {
        return _colTitles;
    }
}

(稍后,当然,这些东西将从数据库中获取) .

这个简单的任务超出了我作为WPF开发人员的才能 .

如何将ItemsSource设置为此静态类?如何进一步将DisplayMemberPath设置为基础Title对象的Description属性?

我将SelectedValue和SelectedValuePath设置为什么?

真的希望有人可以帮助我解决一个看似无法解决的简单问题 .

谢谢,格雷

3 回答

  • 2

    在您的viewModel中创建一个如下属性:

    public IList<Title> VmTitles
    {
        get
        {
            return Titles.GetTitles();
        }
    }
    
    private Title _selectedTitle;
    public Title SelectedTitle
    {
        get
        {
            return _selectedTitle;
        }
        set
        {
            if (value != _selectedTitle)
            {
                _selectedTitle = value;
                OnPropertyChanged("SelectedTitle");
            }
        }
    }
    

    然后在你的.xaml中你这样做:

    <ComboBox x:Name="cboTitle" ItemsSource="{Binding Path=VmTitles}" DisplayMemberPath="Description" SelectedItem="{Binding Path=SelectedTitle}" />
    
  • 0
    <ComboBox x:Name="cboTitle" SelectedValuePath="TitleId" DisplayValuePath="Description" SelectedValue="{Binding PropertyToBeUpdatedHere}"/>
    

    然后在代码中设置组合框的项目源 .

    cboTitle.ItemsSource = Titles.GetTitles();
    
  • 1

    只需使用ObjectDataProvider .

    <UserControl.Resources>
        <ObjectDataProvider x:Key="cboSource" ObjectType="local:Titles" MethodName="GetTitles"/>
    </UserControl.Resources>
    
        <ComboBox ItemsSource="{Binding Source={StaticResource cboSource}}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Description}"/>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    

    ps:你必须将内部静态更改为公共静态 .

相关问题