Ответы пользователя по тегу C#
  • Как выбрать значения определенного типа атрибута из пространства имён?

    WarFollowsMe
    @WarFollowsMe
    попробуйте Reflection.
    foreach (var property in typeof(MyClassFromEntity).GetProperties())
    {
        foreach (var attribute in property.GetCustomAttributes(true))
        {
            if(attribute is DisplayNameAttribute)
            {
                var displayNameAttribute = attribute as DisplayNameAttribute;
                var displayName = displayNameAttribute.Name;
            }
            else if(attribute is GroupNameAttribute)
            {
                var groupNameAttribute = attribute as GroupNameAttribute;
                var groupName = groupNameAttribute.Name;
            }
        }
    }
    Ответ написан
    Комментировать
  • Как правильно изменять список одной сущности из другой?

    WarFollowsMe
    @WarFollowsMe
    Профоргу иметь свой список событий нет необходимости. Если события закреплены за профсоюзом, то и профорг должен непосредственно работать с этим списком, а не дублировать свой. Чем меньше списков вы создадите, тем проще потом будет в них ориентироваться. Здесь достаточно одного events в Union.
    class ProfOrg
    {
        private Union _union;
    
        public ProfOrg(Union union)
        {
            _union = union;
        }
    
        public void AddEvent(UnionEvent unionEvent)
        {
            _union.Events.Add(unionEvent);
        }
    }
    
    class Union
    {
        private ProfOrg _profOrg;
        private List<UnionEvent> _events;
    
        public List<UnionEvent> Events { get { return _events; } }
        public ProfOrg ProfOrg { get{ return _profOrg; }
    
        public Union()
        {
            events = new List<UnionEvent>();
            profOrg = new ProfOrg(this);
        }
    }
    Ответ написан
    Комментировать
  • Как вывести в combobox поле, составляющееся из частей?

    WarFollowsMe
    @WarFollowsMe
    Опишите свой ItemTemplate для ComboBox.
    <ComboBox ItemsSource={Binding Items}>
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding FirstName}"/>
                    <TextBlock Text="{Binding LastName}"/>
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

    Главное вы должны понимать, что одной лишь модели полученной "Code-First подходом" для WPF недостаточно. Вам необходимо создать ViewModel, в которой надо реализовать INotifyPropertyChanged. И уже эту viewmodel кидать в DataContext на view.
    Ответ написан
    Комментировать
  • Как правильно обрабатывать трейсы в c#?

    WarFollowsMe
    @WarFollowsMe
    1) Возможно вам поможет AOP
    Вот статья где приведен пример использования PostSharp для try-catch

    2) Можно также попробовать использовать AppDomain.UnhandledException.
    Ответ написан
    1 комментарий
  • Какую библиотеку исользовать для генерации PDF из шаблона HTML?

    WarFollowsMe
    @WarFollowsMe
    wkhtmltopdf не пробовали? Это только C# обертка. Сама утилита использует Qt WebKit. И ее надо устанавливать отдельно.
    Ответ написан
    Комментировать
  • Как сделать страницы ошибок в браузере?

    WarFollowsMe
    @WarFollowsMe
    В стандартном контроле такой возможности нет, нужно сделать обертку чтобы отлавливать ошибки навигации. На msdn есть пример как это сделать.
    Ответ написан
    3 комментария
  • Как разделить строку через тире?

    WarFollowsMe
    @WarFollowsMe
    странно что не было примера с регуляркой. По моему такое решение лаконичнее
    var some = "123456789";
    var result = Regex.Replace(some, "([0-9]{4})", "$1-");
    если нужен любой текст, то вот так:
    Regex.Replace(some, "(.{4})", "$1-");
    Ответ написан
    Комментировать
  • Отрицательный Byte?

    WarFollowsMe
    @WarFollowsMe
    Если у вас есть сервер написан на одном языке (Java), а клиент на другом (C#), между ними не бегают типы byte, они друг другу посылают данные. Типы это всего лишь описательные структуры языка программирования и к данным они не имеют никакого отношения. Просто программисту понятнее вместо 10000001, получить значение byte myVar = 129.

    byte в Java min value = -128, max value = 127.
    byte в C# min value = 0, max value = 255
    sbyte в C# min value = -128, max value = 127
    Мое мнение вы просто запутались в трех соснах.

    Еще очень важное отличие Java и .Net в порядке байтов. У .Net по умолчанию это Little Endian, у Java это Big Endian. Конкретно вашего вопроса эта информация не касается, но в будущем может пригодится.
    Ответ написан
    Комментировать
  • Через htmlagilitypack спарчить таблицу?

    WarFollowsMe
    @WarFollowsMe
    Вы серьезно считаете, что указали в вопросе полную информацию по которой можно понять задачу и помочь вам?
    Ответ на ваш вопрос. Да, элемент tbody не находит. Как исправить? Найти элемент.
    Ответ написан
  • Есть ли способы генерировать уникальный ID для клиента, не в формате UUID и не GUID, а простое целое число?

    WarFollowsMe
    @WarFollowsMe
    в C# есть возможность создавать уникальный int с помощью System.Threading.Interlocked.Increment.
    Выглядит это вот так:
    private static int tick = Environment.TickCount;
    public int Id
    {
        get{return Interlocked.Increment(ref tick);}
    }

    Для конкретно вашего случая думаю стоит все же воспользоваться вариантом, описанным в других ответах (использование auto_increment). Но в общем случае, если возникнет подобная задача не только в рамках работы с БД, полезно знать о такой возможности.
    Ответ написан
    Комментировать
  • Generic Типы и UpCast к базовому интерфейсному типу(ковариантность обобщений)?

    WarFollowsMe
    @WarFollowsMe
    В C# при помощи интерфейсов реализуют важное свойство ООП - полиморфизм. Вкратце, это выделение одинаковых свойств и методов объектов, не привязываясь к их типу. Если простыми словами, то например у нас есть ряд объектов: стул, стол, чашка, грустный мопс и комета Чурюмова-Герасименко. И например стоит задача отслеживать их передвижение. Все объекты разных типов и привести их к одну общему не получается. В этом случае на помощь как раз и приходят интерфейсы. Описываем нужные нам свойства
    public interface INotifyCoordinateChanged
    {
        string Name{get;set;}
        double X{get;set;}
        double Y{get;set;}
        double Z{get;set;}
        event Action<INotifyCoordinateChanged> CoordinateChanged;
    }

    и если мы реализуем у всех объектов этот интерфейс, то теперь нам достаточно отслеживать изменения в списке
    List<INotifyCoordinateChanged> Objects{get;set;}
    P.S. А ваш пример очень странный. Интересно для объяснения какой темы его использовали. Просто это абсолютно бессмысленная солянка, пмсм.
    Ответ написан
    Комментировать
  • Валидация в wpf?

    WarFollowsMe
    @WarFollowsMe
    public class OnlyTextValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            bool noNumbers = Regex.Matches("^([^0-9]*)$",value.ToString()).Count > 0;
            return new ValidationResult(noNumbers, "Value contains numbers");
        }
    }

    <Window.Resources>
    		<local:OnlyTextValidationRule x:Key="NoNumberValidate"/>
    </Window.Resources>

    <TextBox Text={Binding Value, ValidationRules={StaticResource NoNumberValidate}}/>
    Ответ написан
    Комментировать
  • Как автоматически пересчитать значения?

    WarFollowsMe
    @WarFollowsMe
    ViewModel со значением давления
    public class PressureViewModel:INotifyPropertyChanged
    {
        private double _pressure;
    
        public double Pressure
        {
            get{return _pressure;}
            set
            {
                _pressure = value;
                SendPropertyChanged("Pressure");
            }
        }
    
        protected void SendPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    }


    код конвертера:
    public class PaskalToBarConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            // метод преобразования паскаль в бар
            return PaskalToBar((double)value);
        }
    
        public object ConvertBack(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            //метод преобразования бар в паскаль
            return BarToPaskal((double)value);
        }
    }


    в xaml добавляем ссылку на namespace конвертера:
    xmlns:converters="clr-namespace:ConvertersNamespace"


    в ресурсах добавляем конвретер:
    <Window.Resources>
    		<converters:PaskalToBarConverter x:Key="PaskalToBar"/>
    </Window.Resources>


    ну и в TextBox привязываем давление+конвертер:
    <TextBox x:Name="PaskalPressure" Text={Binding Pressure}/>
    <TextBox x:Name="BarPressure" Text={Binding Pressure, Converter={StaticResource PaskalToBar}}/>


    Тоже самое делаете для мм.р.ст
    Ответ написан
  • Использование Binding в WPF?

    WarFollowsMe
    @WarFollowsMe
    Подскажите, пожалуйста, можно ли использовать привязки в WPF так, чтобы изменения в объекте оказывали влияние на UI-елемент? При этом реализовать это без использования INotifyPropertyChanged.

    Нет.
    Ответ написан
    Комментировать
  • Как реализовать динамический интерфейс?

    WarFollowsMe
    @WarFollowsMe
    У каждого листа своя структура, и у каждой версии файла структура листа может быть другой.

    При использовании WPF и создании динамических UI очень помогает MVVM. Поэтому рекомендую прежде чем бросаться сразу делать UI, реализовать модель всей вашей структуры. Описать классы File, Element. Возможно если речь действительно о каких-то структурированных файлах (.xml, .json) то написать методы сериализации/десериализации.
    Потом создать ViewModel, в ней реализовать все прелести интерфейса INotifyPropertyChanged. Это как раз и даст возможность в вашем UI удобно использовать технологию DataBinding, привязывая элементы отображения к свойствам описанным в ViewModel.
    Ответ написан
    Комментировать