Флажок Событие не сработало в Listview UWP - PullRequest
0 голосов
/ 24 января 2019

Я на самом деле разрабатываю приложение UWP, которое читает данные Excel и отображает их в форме. Каждый лист Excel представлен с RadioButton, и когда пользователь нажимает на RadioButton, я обновляю ListView с соответствующими данными. Каждый элемент ListView имеет разные данные и 2 флажка. Этот флажок может иметь состояние «истина» или «ложь», и если пользователю нужно изменить состояние, я хочу изменить его значение

Но проблема в том, что при проверке всех флажков событие не вызывается. Я попытался найти и попытаться создать свой собственный шаблон, но безуспешно.

Все данные хранятся в классе:

public class REFERENCES
{
    public int AI_ID { get; set; }
    public int ID_poste { get; set; }
    public string reference { get; set; }
    public string designation { get; set; }
    public bool avance { get; set; }
    public bool jour { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    public REFERENCES(int ai_id, int id_poste, string ref_, string des_, string avance_, string jour_)
    {
        AI_ID = ai_id;
        ID_poste = id_poste;
        reference = ref_;
        designation = des_;
        if(jour_ != null)
        {
            jour = true;
        }
        else
        {
            jour = false;
        }
        if (avance_ != null)
        {
            avance = true;
        }
        else
        {
            avance = false;
        }
    }

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

}

А это мой ListView:

<ListView x:Name="ListViewData" SelectionMode="None" HorizontalAlignment="Center" Height="412" VerticalAlignment="Top" Width="650" Margin="0,218,0,0" >
        <ListView.HeaderTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Height="35" Margin="0,0,0,0" VerticalAlignment="Center"  >
                    <TextBlock Text="AI_ID" Width="0" Visibility="Collapsed" />
                    <TextBlock Text="Désignations" FontSize="20" Width="300" Foreground="Blue" TextAlignment="Center" VerticalAlignment="Center" />
                    <TextBlock Text="Références" FontSize="20" Width="150" Foreground="Blue" TextAlignment="Center" VerticalAlignment="Center" />
                    <TextBlock Text="Avance" FontSize="20" Width="100" Foreground="Blue" TextAlignment="Center" VerticalAlignment="Center" />
                    <TextBlock Text="Jour" FontSize="20" Width="100" Foreground="Blue" TextAlignment="Center" VerticalAlignment="Center" />
                </StackPanel>
            </DataTemplate>
        </ListView.HeaderTemplate>
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="ExcelLinkData:REFERENCES">
                <StackPanel Orientation="Horizontal" >
                    <TextBlock Name="ItemAI_ID" Text="{x:Bind AI_ID}" Width="0" />
                    <TextBlock Name="ItemDesignation" Text="{x:Bind designation}" Width="300" FontSize="16" Height="55" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
                    <TextBlock Name="ItemReference" Text="{x:Bind reference}" Width="150" FontSize="16" Height="55" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center" />
                    <Grid Width="100" Height="55" VerticalAlignment="Center" HorizontalAlignment="Center">
                        <CheckBox Name="ItemAvance" IsChecked="{x:Bind avance}" Tag="{x:Bind AI_ID}" Checked="CHANGE_STATUS_REFERENCE"/>
                    </Grid>
                    <Grid Width="100" Height="55" VerticalAlignment="Center" HorizontalAlignment="Center">
                        <CheckBox Name="ItemJour" IsChecked="{x:Bind jour}" Tag="{x:Bind AI_ID}" Checked="CHANGE_STATUS_REFERENCE"/>
                    </Grid>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Метод "CHANGE_STATUS_REFERENCE" - это метод, в котором я хочу изменить состояние в моем классе.

Я пробовал разные решения, но я не эксперт в UWP, поэтому, если кто-нибудь получит совет, я его приму!

Заранее спасибо за ваше время!

Гийом

Ответы [ 2 ]

0 голосов
/ 24 января 2019

В UWP режим по умолчанию для Binding равен OneTime.А когда вы изменяете свойство из viewmodel, событие не запускается.Изменяя Binding на OneWay / TwoWay (в зависимости от вашего использования), viewmodel вызовет событие.

Измените

IsChecked="{x:Bind jour}"

на

IsChecked="{x:Bind jour Mode=TwoWay}"
0 голосов
/ 24 января 2019

Изменить

 <CheckBox Name="ItemAvance" IsChecked="{x:Bind avance}" Tag="{x:Bind AI_ID}" Checked="CHANGE_STATUS_REFERENCE"/>

на

<CheckBox Name="ItemAvance" IsChecked="{x:Bind avance}" Tag="{x:Bind AI_ID}" Command="{Binding CHANGE_STATUS_REFERENCE}"/>

Добавить «функцию переворачивания» к вашему классу:

private void Flip()
{
    this.avance = !this.avance;
}

Установить RelayCommand:

RelayCommand _flipCommand = new RelayCommand(this.Flip);

и реализовать CHANGE_STATUS_REFERENCE как ICommand примерно так:

public ICommand CHANGE_STATUS_REFERENCE
{
    get
    {
        return _flipCommand;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...