
Илья
16.10.2018
19:12:36
а на старых ведрах будет тормозить все
включая операционную систему

Кита
16.10.2018
19:13:53

Google

Кита
16.10.2018
19:13:57
Короче все зависит от задач. Если кровавый тырпрайз где пофиг на всех это один разговор, если b2c это совершенно другой. Рекомендовать к использованию ту или иную либу без знания в каком контексте она будет применена - делать бяку

GETHEME
16.10.2018
19:17:35
@senglory
public int Busy
{
get { return busy; }
set
{
if (busy != value)
{
busy = value;
OnPropertyChanged("Busy");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
попробуй так заменять PropretyChangedEventHanler, и он OnPropretyChanged

Nikolay
16.10.2018
19:18:52

Илья
16.10.2018
19:22:54

Кита
16.10.2018
19:30:33

Nikolay
16.10.2018
19:54:43
В итоге, с OnPropertyChanged ни фига не работает

Kirill
16.10.2018
20:00:07
@senglory GETHEME Согласен с @ptytz - всякие такие штуки и fody - таки зло. Ради того, что бы не писать лишнюю строку подключают комбайны. Можно написать простой класс, отнаследоваться от него и писать для байндингов что-то такое:
public bool Busy {
get => Get<bool>();
set => Set(value);
}
не намного сложнее, чем просто get;set;
Или стандартный подход как Монтемагно предлагает через метод SetProperty с ref параметром.
В частности моя реализация (по примеру выше) тут https://github.com/Binwell/Order-King-Mobile-Core/blob/master/OrderKingCoreDemo/OrderKingCoreDemo/Helpers/Bindable.cs
А вот что не работает тот код - это надо рзбираться и от способа отправки события не зависит.
Чем меньше всяких библиотек и прочего мусора, тем лучше проект, быстрее собирается, запускается и надежнее работает.

GETHEME
16.10.2018
20:01:13
@BOOMikru я тоже согласен с @ptytz


Nikolay
16.10.2018
20:02:45
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using WiFiManager.Common.BusinessObjects;
using Xamarin.Forms;
using Xamarin.Forms.PlatformConfiguration;
namespace WiFiManager.Common
{
public class MainPageVM : INotifyPropertyChanged
{
IWifiOperations mgr;
#region Properties
ObservableCollection<WifiNetworkDto> _WifiNetworks=new ObservableCollection<WifiNetworkDto> ();
public ObservableCollection<WifiNetworkDto> WifiNetworks
{
get
{
return _WifiNetworks;
}
set
{
SetProperty(ref _WifiNetworks, value, "WifiNetworks");
}
}
WifiNetworkDto _selectedNetwork;
public WifiNetworkDto SelectedNetwork
{
get
{
return _selectedNetwork;
}
set
{
SetProperty(ref _selectedNetwork, value, "SelectedNetwork");
}
}
bool isBusy;
public bool IsBusy
{
get { return isBusy; }
set
{
SetProperty(ref isBusy, value, "IsBusy");
}
}
bool isConnected;
public bool IsConnected
{
get { return isConnected; }
set
{
SetProperty(ref isConnected, value, "IsConnected");
}
}
#endregion
public event PropertyChangedEventHandler PropertyChanged;
public MainPageVM(IWifiOperations mgr) {
this.mgr = mgr;
SaveCommand = new Command(DoSave);
SaveJsonCommand = new Command(DoSaveJson);
ConnectCommand = new Command(ExecuteConnect);
DisconnectCommand = new Command(DoDisconnect);
RefreshNetworksCommand = new Command(DoRefreshNetworks);
DeleteNetworkCommand = new Command(DoDeleteNetwork);
IsConnected = mgr.IsConnected();
}
public void SortListByLevel()
{
var lst1 = WifiNetworks.OrderBy(nw => Math.Abs( nw.Level));
WifiNetworks = new ObservableCollection<WifiNetworkDto>(lst1);
}
public void DoRefreshNetworks()
{
try
{
IsBusy = true;
var lst1 = mgr.GetActiveWifiNetworks();
// for quick search
var allrecsQuickSearch = new Dictionary<string, WifiNetworkDto>();
foreach (var item in lst1)
{
allrecsQuickSearch.Add (item.BssID, item);
}
if (mgr.CanLoadFromFile())
{
var lst2 = mgr.GetWifiNetworksFromCSV();
foreach (var existingWifi in lst1)
{
var wifiDtoFromFile = lst2.GetExistingWifiDto(existingWifi);
var isOnAir = wifiDtoFromFile != null;
if (isOnAir)
{
// update existing Wifi info from file (except for BSSID)
existingWifi.IsInCSVList = isOnAir;
existingWifi.IsEnabled = wifiDtoFromFile.IsEnabled;
existingWifi.Password = wifiDtoFromFile.Password;
existingWifi.Provider = wifiDtoFromFile.Provider;
}
}
}
WifiNetworks = new ObservableCollection<WifiNetworkDto>(lst1);
SortListByLevel();
IsConnected = mgr.IsConnected();
SelectedNetwork = null;
}
finally
{
IsBusy = false;
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:WiFiManager"
xmlns:shapes="clr-namespace:Stormlion.ShapeControl;assembly=Stormlion.ShapeControl"
x:Class="WiFiManager.MainPage"
x:Name="MainPageMain">
<ContentPage.Resources>
<local:EmptyStringCvt x:Key="EmptyPwdCvt" />
<local:NetworkTypeCvt x:Key="WEPNetworkCvt" />
<!-- Default DataTemplate -->
<DataTemplate x:Key="DefaultDataTemplate">
</DataTemplate>
<DataTemplate x:Key="NoteDataTemplate">
<ViewCell>
<StackLayout Orientation="Vertical" HorizontalOptions="Fill" >
<StackLayout.Resources>
<Style TargetType="StackLayout">
<Style.Triggers>
<DataTrigger TargetType="StackLayout" Binding="{Binding IsInCSVList}" Value="True">
<Setter Property="BackgroundColor" Value="Gray" />
</DataTrigger>
<DataTrigger TargetType="StackLayout" Binding="{Binding IsSelected}" Value="True">
<Setter Property="BackgroundColor" Value="OrangeRed" />
</DataTrigger>
<DataTrigger TargetType="StackLayout" Binding="{Binding IsEnabled}" Value="False">
<Setter Property="BackgroundColor" Value="DarkRed" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackLayout.Resources>
<Grid RowSpacing="1">
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="10"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Text="{Binding Name}" HeightRequest="20" />
<StackLayout Grid.Row="1" Grid.Column="0" Orientation="Horizontal" HorizontalOptions="Fill" HeightRequest="20">
<Label Text="{Binding BssID}" HeightRequest="20" MinimumWidthRequest="180" />
<Label Text="{Binding NetworkType}" HeightRequest="20" FontSize="Micro" />
</StackLayout>

Google

Kirill
16.10.2018
20:04:24
@senglory перенеси это на pastebin / gist

Nikolay
16.10.2018
20:06:52
XAML - https://pastebin.com/6qmCvz4J
VM - https://pastebin.com/B6KnkrAp

Kirill
16.10.2018
20:10:22
@senglory попробуй прописать IsRunning="true"
и в xaml.cs классе есть что-то?

Nikolay
16.10.2018
20:11:27

Kirill
16.10.2018
20:11:57

Nikolay
16.10.2018
20:14:01
https://pastebin.com/40sTfyT4
Не, добавление vm.IsBusy = true; в конструкторе ничго не решило

Kirill
16.10.2018
20:15:06

Nikolay
16.10.2018
20:15:31
У меня нет IsRunning :)

Kirill
16.10.2018
20:16:14
и зачем менять и в VM и на странице? перенеси всё во VM и тогда проверяй. Сейчас могут конфликтовать изменения с разных место

Nikolay
16.10.2018
20:16:34
Ааа, в самом контроле

mute
16.10.2018
20:26:27
ребят разъясните за нугеты плз. есть старый проект на формс. там нугеты добавляются в csproj в том числе и для нативных. и есть новый проект на другом компе и созданный в самой крайней vs4mac. в нем пакеты в андроед проекте добавляются в packages.config. второй способ вроде устаревший. это можно поменять или это норм и не делать мозг? первый проект был создан изначально в виндовой стулии, второй изначально в маковой
я наверно дурачек, нр маны по миграции только для виндовой студии находил

Nikolay
16.10.2018
20:30:44

Kirill
16.10.2018
20:31:21

Nikolay
16.10.2018
20:34:20
Сейчас в .xaml.cs нет явного вызова IsBusy=true
Все только в самом VM

mute
16.10.2018
20:35:07

Google

Kirill
16.10.2018
20:35:23

mute
16.10.2018
20:36:42
рефы на нугеты или тип сам ключ что юзать рефы в csproj?

Kirill
16.10.2018
20:36:58

Nikolay
16.10.2018
20:43:39
Снес все модификации IsBusy в xaml.cs - пофигу

GETHEME
16.10.2018
20:51:52
Nikolay а если поставить к binding-у Binding-mode oneWay???, IsRunning="{Binding IsBusy,Mode=OneWay}"
IsVisible="{Binding IsBusy,Mode=OneWay}"???
IsRunning="{Binding IsBusy,Mode=OneWay}"
IsVisible="{Binding IsBusy,Mode=OneWay}"

Nikolay
16.10.2018
20:52:37
пофигу

GETHEME
16.10.2018
20:56:24
да у Activator по умольчаню эти пропрети в моде : oneWay

Kirill
16.10.2018
21:01:32
Тогда прям магия, должно работать так

Nikolay
16.10.2018
21:06:25
только прямое присвоение из RefreshCoords_Clicked работает
бред...

Kirill
16.10.2018
21:14:45
пробовал везде убрать ручное присвоение?
перенеси всю логику во VM и проверь так, сейчас лапша. Так то прописано всё вроде правильно и должно работать
Кстати для SetProperty лучше передавать название поля через nameof(IsBusy), хотя в данно случае вообще не обязательно его указывать, ибо есть [CallerMemberName]

GETHEME
16.10.2018
21:35:24
Kirill Nikolay меня тут тоже смущает в VM метод DoRefreshNetworks(), он типом void, мне кажется все вроде норм работает но на много быстрей обработаеся finaly(), я бы для проверке просил бы поставить. а по суте если хорошо понял это в нем должен посходить изменении значении IsBusy,

PM
16.10.2018
21:36:23
Здравствуйте, товарищи
что можете сказать, насколько вы довольны Ксамарином
как средством кросс-платформенной разработки
довольны ли кастомеры, хватает ли функционала под среднестатистические нужды кастомеров малого и среднего бизнеса?

Google

GETHEME
16.10.2018
21:39:00
@senglory и ещё в Xaml, ActivityIndicator находиться в stackLayout с гридом

Nikolay
16.10.2018
21:39:22

GETHEME
16.10.2018
21:40:04
получается что он не будет по центру экран распологаться,

Андрей Родионович
16.10.2018
21:42:02
Он по центру по x должен быть
Хотя там указано только по y

GETHEME
16.10.2018
21:43:08
там он еще явно указал VerticalOptions="Center"

Андрей Родионович
16.10.2018
21:44:42
<StackLayout Grid.Row="0" HorizontalOptions="Fill" Orientation="Horizontal">
Вот этой строчки я тоже не понял
HorizontalOptions="Fill"
Стэк находится в гриде
Зачем там horizontaloptions?

GETHEME
16.10.2018
21:51:35
короче, тут проблема не только в Binding-е, надо пересмотрить в xaml, и ещё вся логика, я тут извиняюсь не знаю какую фичу хотели реализавать, но много надо пересмотрить.
я пошел, всем пока

PM
16.10.2018
21:52:23
PM BA, [17.10.18 00:36]
Здравствуйте, товарищи
PM BA, [17.10.18 00:36]
что можете сказать, насколько вы довольны Ксамарином
PM BA, [17.10.18 00:36]
как средством кросс-платформенной разработки
PM BA, [17.10.18 00:37]
довольны ли кастомеры, хватает ли функционала под среднестатистические нужды кастомеров малого и среднего бизнеса?

Андрей Родионович
16.10.2018
21:54:23
По моему такое проворачивать нельзя

Slava
16.10.2018
22:01:39

Кита
16.10.2018
22:10:08
https://youtu.be/SGG_5ExlA68 вот тут по чесноку преимущественно

Boris
17.10.2018
03:02:00

Google

E
17.10.2018
06:25:43
какие названия ресурсов нужно указывать в настройках чтобы google понял? Приложение на Xamarin.Forms

Aleksandr
17.10.2018
06:39:49
всем привет. Кто нибудь в курсте как в Edit отловить момент когда происходит перенос на новую строку если слово не помещяется в ширину елемента? Нужно сделать чтобы происходило увеличение edit до определенной высоты, но улечиние происходит только если явно добавить символ новой строки


Mikhail
17.10.2018
07:00:33
Хотите мобильную разработку в вашей компании переводить на кроссплатформу или просто исследуете инструменты для домашних поделок?
Можно посмотреть, например, вот это https://www.youtube.com/watch?v=RTbX7IyMypY
ну... в нашей компании было так:
- надо сделать мобильное приложение, и.... исполнителем - будешь ... ТЫ!
- я ничего не знаю про мобильную разработку
- не важно! - C# знаешь? знаешь! пиши на Xamarin - какая разница то?! ))
прошёл месяц - первая версия сделана ) убого выглядит но сделана... и мне присылают новый дизайн (мы это с заказчиками согласовали) - я смотрю, ужасаюсь ... и понимаю что ну тут надо Nativ - быстрее будет и красивее
переписываю всё на на Xamarin Native с Forms, пока переписываю, понимаю что по сути шаг влево-вправо... и надо гуглить уже решения для Android на Jave и транслировать на C# + под себя... и... а в таком случае а зачем C#?! собственно, в Java некоторые конструкции проще выглядят (к примеру на лету в коде new ClassName { override void onTextChanged { ...}) и...
паралельно делаю версию на Java :)
показываю начальству что это весит намного меньше, запускается быстрее, ну и вообще это родное для андроид ))
а руководство говорит - нет! не будет ни какой Java, и так у нас зоопарк технологий и сотрудников под каждый стек фиг найдёшь! ты мне предлагаешь ещё и специалистов знающих Java искать? а потом - когда надо под IOS -знающих Swift или Objective C? нет!!
будем писать на C# ))
Xamarin!! и всё тут!!! :)


Kirill
17.10.2018
07:26:29
ну... в нашей компании было так:
- надо сделать мобильное приложение, и.... исполнителем - будешь ... ТЫ!
- я ничего не знаю про мобильную разработку
- не важно! - C# знаешь? знаешь! пиши на Xamarin - какая разница то?! ))
прошёл месяц - первая версия сделана ) убого выглядит но сделана... и мне присылают новый дизайн (мы это с заказчиками согласовали) - я смотрю, ужасаюсь ... и понимаю что ну тут надо Nativ - быстрее будет и красивее
переписываю всё на на Xamarin Native с Forms, пока переписываю, понимаю что по сути шаг влево-вправо... и надо гуглить уже решения для Android на Jave и транслировать на C# + под себя... и... а в таком случае а зачем C#?! собственно, в Java некоторые конструкции проще выглядят (к примеру на лету в коде new ClassName { override void onTextChanged { ...}) и...
паралельно делаю версию на Java :)
показываю начальству что это весит намного меньше, запускается быстрее, ну и вообще это родное для андроид ))
а руководство говорит - нет! не будет ни какой Java, и так у нас зоопарк технологий и сотрудников под каждый стек фиг найдёшь! ты мне предлагаешь ещё и специалистов знающих Java искать? а потом - когда надо под IOS -знающих Swift или Objective C? нет!!
будем писать на C# ))
Xamarin!! и всё тут!!! :)
Приложение это не только UI, но и бизнес логика, которая на Xamarin вносится в отдельный проект и используется. Чисто на Java/Swift такого не сделать


Aleksandr
17.10.2018
07:28:27
на 3 формах

mute
17.10.2018
07:32:57


Kirill
17.10.2018
07:34:28