如何在ItemTemplate中编写UWP MVVM组合框



我想弄清楚如何在一个组合框中显示一个所选项目的类别,这个组合框本身就是GridView.ItemsTemplate。到目前为止,我所尝试的都没有奏效。我试过使用SelectedValue和SelectedValuePath。我可以在GridView内的文本框中显示项目的类别。ItemsTemplate,而不是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>

您的组合框没有ItemsSource

你需要这样做…

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

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

在视图中,绑定到集合

<ComboBox ItemsSource="{Binding FieldNoteIds}">

现在你提供了一个模板来显示每个被填充到组合框中的项目,但是你没有给它任何东西来填充。

MSDN组合框和绑定教程

https://code.msdn.microsoft.com/windowsdesktop/Best-ComboBox-Tutorial-5cc27f82内容

最新更新