如何在ItemTemplate中编写UWP MVVM ComboBox?

时间:2016-06-27 21:02:24

标签: mvvm combobox uwp

我正在试图弄清楚如何在ComboBox中显示所选项目的类别,ComboBox本身位于GridView.ItemsTemplate中。到目前为止,我所尝试的一切都没有奏效。我尝试过使用SelectedValue和SelectedValuePath。 我可以在GridView.ItemsTemplate中的文本框中显示Item的Category,但不能在ComboBox中显示该集合。

// FiledNotesPageViewModel ViewModel
public class FiledNotesPageViewModel : ViewModelBase
{
public ObservableCollection<MemoryItem> NoteItems { get; set; } = new ObservableCollection<MemoryItem>();
}

// Public Properties
        public int FiledNotesId
    {
        get
        {
            return _filedNotesId;
        }
        set
        {
            _filedNotesId = value;
            OnPropertyChanged("FiledNotesId");
        }
    }
            public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
            OnPropertyChanged("Name");
        }
    }
    public string Note
    {
        get
        {
            return _note;
        }
        set
        {
            _note = value;
            OnPropertyChanged("Note");
        }
    }
    public string Category
    {
        get
        {
            return _category;
        }
        set
        {
            _category = value;
            OnPropertyChanged("Category");
        }
    }

// MemoryItem Model

    public int FiledNotesId { get; set; }

    public string Note { get; set; } 

    public string Name { get; set; }

    public string Category { get; set; }

FiledNotesPage查看

 <GridView x:Name="FiledNotesGrid"
              RelativePanel.Below="FilterNoteGrid"
              ItemsSource="{x:Bind ViewModel.NoteItems}">
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <ItemsWrapGrid Orientation="Horizontal" 
                               Margin="5"/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.ItemTemplate>
            <DataTemplate x:DataType="data:MemoryItem">                    
                <StackPanel Orientation="Vertical" 
                            BorderBrush="{ThemeResource AppBarBorderThemeBrush}" 
                            BorderThickness="2,2,2,4" 
                            Margin="20"
                            Background="#FFF7F713" >
                    <TextBox x:Name="NoteNameTextBox" 
                             Text="{x:Bind Name, Mode=TwoWay}"/>
                    <TextBox x:Name="NoteTextBox"
                             TextWrapping="Wrap"
                             AcceptsReturn="True"
                             Text="{x:Bind Note, Mode=TwoWay}"/>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Margin="5,0">Category:</TextBlock>
                        <ComboBox x:Name="NoteCategoryComboBox"
                                  SelectedItem="{Binding FiledNotesId, Mode=TwoWay}"
                                  MinWidth="125">
                            <ComboBox.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Category}" />
                                </DataTemplate>
                            </ComboBox.ItemTemplate>
                        </ComboBox>
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>

1 个答案:

答案 0 :(得分:0)

你的组合框没有ItemsSource

你需要做这样的事情......

在你的CS文件中创建一个ObservableCollection属性来绑定。

public ObservableCollection<int> FieldNoteIds {get; set;}

在您的视图中,绑定到您的收藏

<ComboBox ItemsSource="{Binding FieldNoteIds}">

现在,您正在提供一个模板,用于显示填充到组合框中的每个项目,但是您没有给它填充任何内容。

关于组合框和绑定的MSDN教程

https://code.msdn.microsoft.com/windowsdesktop/Best-ComboBox-Tutorial-5cc27f82#content