Как создать представление списка с флажком с флажком «Выбрать все» в uwp - PullRequest
0 голосов
/ 06 марта 2019

Я хочу создать ListView, который содержит название отдела.ListView содержит CheckBox с названиями отделов.Пользователь может проверить и снять флажок с отдела, а также пользователь может щелкнуть по флажку «Выбрать все». Пользователь может выбрать весь отдел.

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Какой просмотр списка вы хотите, либо простой просмотр списка с textcell или imagecell, зависит от вас. Здесь я выкладываю код для просмотра списка с помощью imagecell, а также опцию пролистывания ячеек и просто добавляю Checkbox туда, куда вы хотите Событие и применять логику. Надеюсь, это работает для вас!

  <AbsoluteLayout>

        <ListView x:Name="Demolist" BackgroundColor="White" ItemSelected="Demolist_ItemSelected">

            <ListView.ItemTemplate>
                <DataTemplate>

                    <ImageCell Height="30"
                                Text="{Binding deparment_name }"
                           Detail="{Binding department_description}"
                            ImageSource="ImageName.png">

                        <ImageCell.ContextActions>
                            <MenuItem x:Name="OnMore" Clicked="OnMore_Clicked" CommandParameter="{Binding .}"  Text="More" />
                            <MenuItem x:Name="OnDelete" Clicked="OnDelete_Clicked" CommandParameter="{Binding .}" Text="Delete" IsDestructive="True" />
                        </ImageCell.ContextActions>
                    </ImageCell>

                </DataTemplate>
            </ListView.ItemTemplate>

        </ListView>

</AbsoluteLayout>
0 голосов
/ 07 марта 2019

Флажок не является элементом управления в платформе XF, поэтому я думаю, что вы не можете добавить флажок в просмотр списка в Xamarin.form, но вы можете использовать разные для отображения статуса проверки и отмены.

<ContentPage
x:Class="test2.Page3"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:convert="clr-namespace:test2"
x:Name="ToDoPage">
<ContentPage.Resources>
    <convert:converter1 x:Key="converterbool" />
</ContentPage.Resources>
<ContentPage.Content>
    <StackLayout>
        <ListView x:Name="listview1" ItemsSource="{Binding todoList}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="4*" />
                                <ColumnDefinition Width="*" />

                            </Grid.ColumnDefinitions>
                            <Label Text="{Binding ItemDescription}" VerticalOptions="Center" />
                            <Button
                                Grid.Column="1"
                                Command="{Binding Source={x:Reference ToDoPage}, Path=BindingContext.UpdateCheckBoxCommand}"
                                CommandParameter="{Binding Id}"
                                Opacity="0" />
                            <Image
                                Grid.Column="1"
                                HeightRequest="20"
                                HorizontalOptions="Center"
                                Source="{Binding IsDone, Converter={StaticResource converterbool}}"
                                VerticalOptions="Center" />

                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage.Content>

public class TodoItem:INotifyPropertyChanged
{
    private string _Id;
    public string Id
    {
        get { return _Id; }
        set
        {
            _Id = value;
            RaisePropertyChanged("Id");
        }
    }
    private string _ItemDescription;
    public string ItemDescription
    {
        get { return _ItemDescription; }
        set
        {
            _ItemDescription = value;
            RaisePropertyChanged("ItemDescription");
        }
    }
    private bool _IsDone;
    public bool IsDone
    {
        get { return _IsDone; }
        set
        {
            _IsDone = value;
            RaisePropertyChanged("IsDone");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;


    public void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}


 class ToDoViewModel:INotifyPropertyChanged
{
    public ObservableCollection<TodoItem> todoList { get; set; }
    public ICommand UpdateCheckBoxCommand { get; set; }

    public ToDoViewModel()
    {
        todoList = new ObservableCollection<TodoItem>()
        {
            new TodoItem(){ Id = "1", ItemDescription = "Task 1", IsDone = false},
        new TodoItem(){ Id = "2", ItemDescription = "Task 2", IsDone = false},
        new TodoItem(){ Id = "3", ItemDescription = "Task 3", IsDone = false},
        new TodoItem(){ Id = "4", ItemDescription = "Task 4", IsDone = false},
            new TodoItem(){ Id = "5", ItemDescription = "Task 5",IsDone=false }
        };
        UpdateCheckBoxCommand = new Command((Id) => UpdateCheckBox(Id.ToString()));
    }

    private void UpdateCheckBox(string id)
    {
        IEnumerable<TodoItem> items = todoList.Where(x=>x.Id==id);

        foreach(var item in items )
        {
            if (item.IsDone) item.IsDone = false;
            else item.IsDone = true;
        }


    }

    public event PropertyChangedEventHandler PropertyChanged;


    public void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}


class converter1 : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool ischeck = (bool)value;
        if(ischeck==false)
        {
            return "uncheck.png";
        }
        else
        {
            return "check.png";
        }

    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}


[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class Page3 : ContentPage
{
    public Page3 ()
    {
        InitializeComponent ();
        this.BindingContext = new ToDoViewModel();
    }
}

enter image description here

...