0

подскажите, пожалуйста, почему ViewModel не работает?

Cтраница открывается, никаких ошибок (фатальных) не выдает

ViewModel:

 public class PrivateChatsViewModel : BaseViewModel
{
private ObservableCollection<Models.Visual.MessageInPrivateChats> _chats = new();
private Task Init { get; set; }

public ObservableCollection<Models.Visual.MessageInPrivateChats> Chats
{
    get => _chats;
    set
    {
        if (_chats != value)
        {
            _chats = value;
            OnPropertyChanged();
        }
    }
}

async Task init()
{
    while (true)
    {
        await Task.Run(() =>
        {


        });
        await Task.Delay(2000);
    }
}



public PrivateChatsViewModel()
{
    IsLoading = true;
    if (!server.IsHasConnection())
    {
        IsLoading = false;
        IsHasNotConnection = true;
    }
    else
    {
        IsHasNotConnection = false;
        if (!server.IsHasMessages())
        {
            IsHasNotData = true;
            IsLoading = false;
        }
        else
        {
            IsHasNotData = false;

            List<Models.Message> list = server.GetChats();
            Console.WriteLine($"List length: {list.Count}"); //строки нет в Debug'e
            foreach (var item in list)
            {
                Models.Visual.MessageInPrivateChats message = new()
                {
                    DialogID = item.dialogId,
                    MessageID = item.messageId,
                    LastMessageText = item.message,
                    notReadedCount = item.notReadedCount,
                    isHasNotReaded = item.notReadedCount > 0,
                    ImageStatusResource = getStatusImageResourceByMessageStatus(item.status),
                    TimeBeforeLastMessage = getTimeBefore(item.sendedAt),

                    UserNameSurname = item.userName,
                    UserImageResource = item.imageResource
                };
                _chats.Add(message);
            }

            Chats = _chats;
            Console.WriteLine($"Chats length: {Chats.Count}"); //строки нет в Debug'e
        }
    }
}

... }

BaseViewModel:

public class BaseViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
Services.Server ser;
protected Services.ServerGets server;

public BaseViewModel()
{
    ser = new();
    server = new(ser);
}

private bool _isHasNotData;
private bool _isHasNotConnection;
private bool _isLoading;

public Command Reload { get; set; }

public bool IsLoading
{
    get => _isLoading;
    set
    {
        _isLoading = value;
        OnPropertyChanged();
    }
}


public bool IsHasNotData
{
    get => _isHasNotData;
    set
    {
        _isHasNotData = value;
        OnPropertyChanged();
    }
}

public bool IsHasNotConnection
{
    get => _isHasNotConnection;
    set
    {
        Shell.Current.DisplayAlert("Ошибка", "Отсутствует соединение, попробуйте, пожалуйста, позже", "OK");
        _isHasNotConnection = value;
        OnPropertyChanged();
    }
}

public bool NotIsLoading
{
    get => !_isLoading;
}

public void OnPropertyChanged([CallerMemberName] string name = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));



}

View:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="ProDom.MobileClient.Chats.ChatsPrivatePage"
         Shell.TabBarBackgroundColor="#ac88ec"
         xmlns:viewmodels="clr-namespace:ProDom.MobileClient.ViewModels"
         xmlns:models="clr-namespace:ProDom.MobileClient.Models.Visual"
         x:DataType="viewmodels:PrivateChatsViewModel">

<Shell.TitleView> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="6"/> <ColumnDefinition Width="1"/> </Grid.ColumnDefinitions>

    &lt;HorizontalStackLayout
        Grid.Column=&quot;0&quot;
        IsVisible=&quot;{Binding IsLoading}&quot;&gt; // наслаиваются друг на друга

        &lt;Label 
            Text=&quot;Обновление&quot;
            TextColor=&quot;White&quot;
            FontSize=&quot;18&quot;
            FontAttributes=&quot;Bold&quot;
            VerticalOptions=&quot;Center&quot;
            Margin=&quot;15,0,0,0&quot;/&gt;

        &lt;Image
            Source=&quot;loading.gif&quot;
            IsAnimationPlaying=&quot;True&quot;
            WidthRequest=&quot;50&quot;
            HeightRequest=&quot;50&quot;
            Aspect=&quot;AspectFill&quot;
            Margin=&quot;10,0,0,0&quot;/&gt;

    &lt;/HorizontalStackLayout&gt;

    &lt;Label 
        IsVisible=&quot;{Binding NotIsLoading}&quot; // наслаиваются друг на друга
        Grid.Column=&quot;0&quot;
        Text=&quot;Чаты&quot;
        TextColor=&quot;White&quot;
        FontSize=&quot;18&quot;
        FontAttributes=&quot;Bold&quot;
        VerticalOptions=&quot;Center&quot;
        Margin=&quot;15,0,0,0&quot;
        /&gt;
&lt;/Grid&gt;

</Shell.TitleView>

Извините, что так много кода, не знаю, что конкретно не работает... Спасибо!

  • 1
    Вот вы программист, или пытаетесь им стать, скажите, если вам дадут кусок кода и тупо скажут "не работает", как вы к этому отнесетесь? Я думаю негативно, ибо тот, кто вам дал этот код не потрудился даже описать подробно что не так, и что от этого кода он ожидает. Так почему вы, программист, другим программистам, пишете эту ужасную фразу "не работает"? Так что давайте без вот этого вот "не работает", объясните, что конкретно не так, а уж затем будет от этого отталкиваться. Пока я вот не вижу, где вы задаете DataContext, это единственное что я вижу. – EvgeniyZ Nov 18 '22 at 18:59
  • @EvgeniyZ, судя по всему, ViewModel не привязывается ко View, ожидаю, что данные из ViewModel будут поступать в ContentPage. Насчет DataContext, по-моему, в MAUI аналог этому x:DataType, который задан (про DataContext в доках MAUI информации не нашел) – StudyAndroid Nov 18 '22 at 19:14
  • Эм, нет, аналогом DataContext (зову по привычке из WPF) является BindingContext, в документации прям есть целый раздел про привязки. Вы наверно захотите задать его в XAML, я вам на этот случай дам этот ответ. – EvgeniyZ Nov 18 '22 at 19:27
  • @EvgeniyZ, Спасибо, добавление BindingContext решило проблему) Прошу прощения, что не ответил сразу – StudyAndroid Nov 19 '22 at 16:40

0 Answers0