簡體   English   中英

WPF組合框和數據綁定到其他類

[英]WPF Combo Box and Data Binding to other classes

所有,

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

我有一個視圖 - viewContacts。 它的datacontext是一個viewmodel - viewmodelContacts。

在視圖中我有'標題'的組合框(你知道......先生,夫人,小姐等)。 我想綁定itemssource,以便顯示一個選項列表,並綁定SelectedValue,以便將密鑰存儲在viewmodelContacts TitleId屬性中。

'source'列表,如果標題(我想將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設置為什么?

真的希望有人可以幫助我解決一個看似無法解決的簡單問題。

謝謝,格雷

在您的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}" />
<ComboBox x:Name="cboTitle" SelectedValuePath="TitleId" DisplayValuePath="Description" SelectedValue="{Binding PropertyToBeUpdatedHere}"/>

然后在代碼中設置組合框的項目源。

cboTitle.ItemsSource = Titles.GetTitles();

只需使用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:你必須將內部靜態更改為公共靜態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM