首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Syncfusion Blazor ListBox模板

Syncfusion Blazor ListBox模板
EN

Stack Overflow用户
提问于 2020-09-04 05:44:20
回答 1查看 189关注 0票数 1

我最近开始使用Syncfusion Blazor,但我无法理解列表框的模板功能是如何工作的。我试图动态地将组件添加到列表框中,并将每个新添加的组件的索引传递给该组件。但是,当我添加一个新组件时,以前组件中的所有索引也会更新。我需要能够只为一个组件设置索引。

代码语言:javascript
复制
@page "/test"
@using Syncfusion.Blazor.Buttons
@using Syncfusion.Blazor.DropDowns

<div class="container px-5">
    <SfButton @onclick="AddMedia">Add Media</SfButton>
    <SfListBox TValue="int[]" DataSource="@Data" TItem="ViewMedia" @ref="MediaListBoxObj">
        <ListBoxFieldSettings></ListBoxFieldSettings>
        <ListBoxTemplates TItem="ViewMedia">
            <ItemTemplate>
                <MediaCard media="new ViewMedia { ListIndex = MediaCount }" ></MediaCard>
            </ItemTemplate>
        </ListBoxTemplates>
        <ListBoxSelectionSettings Mode="SelectionMode.Single"></ListBoxSelectionSettings>
    </SfListBox>   
</div>

@code { 
    // public ListData Model = new ListData();
    SfListBox<int[], ViewMedia> MediaListBoxObj;
    public List<ViewMedia> Data = new List<ViewMedia>
    {
        new ViewMedia{ ListIndex = 0}
    };  
    int MediaCount = 0;
    public List<ViewMedia> NewMediaItem { get; set; } = new List<ViewMedia>();
    public List<ViewMedia> NewMedia()
    {
        NewMediaItem.Add(new ViewMedia { ListIndex = MediaCount});
        return NewMediaItem;
    }
    private void AddMedia()
    {
        var newMediaItem = NewMedia();
        MediaListBoxObj.AddItems(newMediaItem);
        Data.Add(newMediaItem[0]);
        MediaCount++;        
        NewMediaItem.Clear();
    }

我的MediaCard文件:

代码语言:javascript
复制
<div class="AddMedia">
    <div name="mediaAdd" class="container-fluid px-4">
        <div class="form-row align-middle mb-2 pl-1">
            <SfTextBox CssClass="e-filled" Placeholder="Provide a brief description" @bind-Value="media.Blurb"></SfTextBox>
        </div>
        <div class="form-row">
            <label class="form-check-label">
                Is there any blood or gore in the video?<span class="text-danger ml-1">*</span>
            </label>
            <div class="row">
                <div class="form-check m-2 d-inline">
                    <SfRadioButton Label="No" Name="@media.ListIndex.ToString()" Value="0" Checked="@media.Gore"></SfRadioButton>
                </div>
                <div class="form-check m-2 d-inline">
                    <SfRadioButton Label="Yes" Name="@media.ListIndex.ToString()" Value="1" Checked="@media.Gore"></SfRadioButton>
                </div>
            </div>
        </div>
    </div>
</div>
@code {
    [Parameter]
    public ViewMedia media { get; set; } 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-05 13:23:27

我在Syncfusion forums上问了这个问题,他们给我回复了以下使用Observable Collection的代码:

代码语言:javascript
复制
<div class="container px-5"> 
    <SfButton @onclick="AddMedia">Add Media</SfButton> 
    <SfListBox TValue="int[]" DataSource="@Data" TItem="ViewMedia" @ref="MediaListBoxObj"> 
        <ListBoxFieldSettings></ListBoxFieldSettings> 
        <ListBoxTemplates TItem="ViewMedia"> 
            <ItemTemplate> 
                @{ 
                    var data = (context as ViewMedia); 
                    <MediaCard media="new ViewMedia { ListIndex = data.ListIndex }"></MediaCard> 
                } 
            </ItemTemplate> 
        </ListBoxTemplates> 
        <ListBoxSelectionSettings Mode="SelectionMode.Single"></ListBoxSelectionSettings> 
    </SfListBox> 
</div> 
 
@code { 
 
    SfListBox<int[], ViewMedia> MediaListBoxObj; 
    public ObservableCollection<ViewMedia> Data { get; set; } 
    int MediaCount = 0; 
 
    protected override void OnInitialized() 
    { 
        this.Data = ViewMedia.getListData(); 
    } 
 
    private void AddMedia() 
    { 
        MediaCount++; 
        this.Data.Add(new ViewMedia() { ListIndex = MediaCount }); 
    } 
public class ViewMedia 
    { 
        public int ListIndex { get; set; } 
        public int Gore { get; set; } 
        public string Blurb { get; set; } 
 
        public static ObservableCollection<ViewMedia> getListData() 
        { 
            ObservableCollection<ViewMedia> Data = new ObservableCollection<ViewMedia>(); 
            Data.Add(new ViewMedia() { ListIndex = 0 }); 
            return Data; 
        } 
    } 

如果上述链接出现故障,可以从here下载上述代码

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63732051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档