Привязать строку и bool в ListView? - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть ListView, который содержит TextBlock и флажок.

Я привязал TextBlock к строке:

<DataTemplate x:DataType="x:String">
//Stuff
        <TextBlock Text="{x:Bind}" x:Name="Text">

Теперь я также хочу иметь флажок, который может бытьпереключен и привязан к списку.Мне не удалось связать с ним бул.Мой текущий способ таков: я переключаю флажок, и я могу получить Родителя, найти что-то под названием «Текст», получить его Текст, найти его Индекс в моей привязке ObservableCollection, и это также индекс моего флажка!Это работает, но Binding будет работать намного лучше.Есть ли способ сделать это с привязкой ??

1 Ответ

0 голосов
/ 01 декабря 2018

Это так просто, и вы можете написать конвертер для преобразования строки в bool.

public class StringToBoolConvert : IValueConverter
{
    public string TrueString { get; set; } = "true";

    /// <inheritdoc />
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (TrueString.Equals(value?.ToString()))
        {
            return true;
        }

        return false;
    }

    /// <inheritdoc />
    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotSupportedException();
    }
}

А затем вы можете добавить StringToBoolConvert к ресурсу.

<Page.Resources>
    <local:StringToBoolConvert x:Key="StringToBoolConvert" TrueString="1"></local:StringToBoolConvert>
</Page.Resources>

Выможно использовать StringToBoolConvert в DataTemplate.

    <ListView ItemsSource="{x:Bind List}">
        <ListView.ItemTemplate >
            <DataTemplate x:DataType="x:String">
                <Grid>
                    <StackPanel>
                        <TextBlock x:Name="Text" Text="{x:Bind}" ></TextBlock>
                        <CheckBox IsChecked="{x:Bind Converter={StaticResource StringToBoolConvert}}"></CheckBox>
                    </StackPanel>

                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Мы пишем некоторый код для привязки в ListView.

    public MainPage()
    {
        this.InitializeComponent();
        DataContext = this;
    }

    public ObservableCollection<string> List { get; set; } = new ObservableCollection<string>()
    {
        "1", "2", "3"
    };

И мы используем StringToBoolConvert и устанавливаем TrueString, где значение равно true, икогда мы проверяем CheckBox.

Для мы устанавливаем TrueString в «1», и мы будем проверять CheckBox, когда значение «1».Попробуйте запустить код, и вы увидите это изображение.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...