Ответы пользователя по тегу C#
  • Как осуществляется связь между ViewModel и Model в MVVM?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Модель в MVVM не должна содержать никаких данных. Данные нужны для отображения во View, соответственно они получаются и используются во ViewModel.

    Model представляет собой модель некой сущности (как правило таблицы БД) и должна состоять в основном из методов манипуляции данными.

    Например:
    UserModel - методы для создания, удаления, редактирования и получения одного или списка пользователей.
    UserViewModel - хранение списка пользователей, либо хранение данных полей пользователя, команды для получения данных из модели, в том числе здесь могут быть и автономно запускающиеся (например по таймеру).
    Ответ написан
    Комментировать
  • Возможно ли подобный SQL запрос преобразовать в LINQ?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Не очень понял конструкцию с whExp, вот мой вариант:

    string[] searchArray = {"WORD1","WORD2"};
    var vars = db.vars.Where(v =>  searchArray.Contains(v.word)).Select(v => v.id);
    
    var xrefs = dr.xref.Where(x => vars.Contains(x.wordid)).GroupBy(x => x.itemid)
        .Select(g => new
        {
            ItemId = g.Key,
            Score = g.Sum(s => s.weight),
            CountItemId = g.Count()
        })
        .OrderByDescending(r => r.CountItemId)
        .ThenByDescending(r => r.Score)
        .Take(20)
        .Select(o => o.ItemId);
    
    var items = db.Items.Where(i => xrefs.Contains(i.id));
    Ответ написан
  • MVVM с ним или без него?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Всегда использовать. Просто - всегда. WPF изначально разработан под связывание и нормальную архитектуру.

    То, что можно делать так же, как в WinForms, не говорит о том, что это стоит делать.

    Просто запомнить как мантру, создал проект - добавь референс на MVVM фреймворк, и работай. Фреймворк любой, например MVVMLight. Или Prism. Или свой велосипед (я так делаю), любой.
    Ответ написан
    Комментировать
  • Как задать Binding для PasswordBox?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Binding для PasswordBox не реализован вполне намеренно, чтобы не было так просто перехватить пароль, введённый в поле.

    В качестве стандартной и относительно безопасной практики, часто пользуюсь передачей PasswordBox-а в команду логина параметром.

    <TextBox Text="{Binding Login}" x:Name="TbxLogin" />
    <PasswordBox x:Name="PasswordBox" />
    <Button Content="Log in" Command="{Binding SigninCommand}"
    		CommandParameter="{Binding ElementName=PasswordBox}" IsDefault="True" />


    public ICommand SigninCommand { get; set; }
    private void Signin(object param)
    {
    	var passwordBox = param as PasswordBox;
    	if (passwordBox == null)
    		return;
    	var password = passwordBox.Password;
            ...
    }
    Ответ написан
    Комментировать
  • Как правильнее организовать соединение с базой данных?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Лучше всего - используйте фреймворк для работы с данными. Entity Framework или NHibernate, на выбор.
    Ответ написан
    Комментировать
  • Как работать с окнами в WPF/MVVM?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Не вижу проблемы, честно говоря. Если вью модель инициализируется во всех окнах одинаково, особенно если автоматически, то можно просто создавать окна и показывать. В зависимости от условий разные.

    Пример:

    Модель:

    namespace MyApp.MyNamespace.ViewModels
    {
    	public class MyWindowModel : INotifyPropertyChanged
    	{
    	   private object _foo;
    	   public object Foo
    	   {
    		  get { return _foo; }
    		  set { _foo = value; RaisePropertyChanged("Foo"); }
    	   }
    
    	...
    
    	}
    }


    Вьюшка:

    <Window x:Class="MyApp.MyNamespace.MyWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:viewModels="clr-namespace:MyApp.MyNamespace.ViewModels">
       <Window.DataContext>
          <viewModels:MyWindowModel x:Key="Model" />
       </Window.DataContext>
       <Grid>
          <TextBlock Text={Binding Foo} />
       </Grid>
    </Window>


    Вызывать можно так, например как вы говорите из окошка логина:
    ...
    // проверяем успешность логина
    if (!loginSuccess)
    	return;
    
    // если всё хорошо, то создаём новое окно
    var myWindow = new MyWindow();
    
    // если нужно - что-то делаем с моделью внутри окна
    var model = myWindow.DataContext as MyWindowModel;
    model.Foo = new object();
    
    // показываем новое окно
    myWindow.Show();
    
    // закрываем текущее окно логина
    var window = Application.Current.Windows[0];
    if (window != null)
    	window.Close();
    Ответ написан
  • Как программно считать GPS данные с фотографии формата jpeg?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Ответ написан
    Комментировать
  • Как отловить ошибку приведения даты в C#?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Ну, кроме того, что вы используете plain sql в коде в XXI веке, вместо того, чтобы использовать одну из замечательных ORM,

    вы забыли, что в таких операциях полезно в начало скрипта вставить SET DATEFORMAT

    Однако, я всё ещё настойчиво рекомендую использовать ORM. Entity Framework, NHibernate, или любой другой на ваш вкус.
    Ответ написан
    Комментировать
  • Какие есть библиотеки для работы с тачскрином для .NET?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Для windows 8 можно использовать modern приложения. Они также поддерживают тачскрин. К тому же их проще портировать для мобильных ОС.
    Ответ написан
    Комментировать
  • Что возвращать, Empty collection или null?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Лучше вернуть OperationResult в обоих случаях, например такой:

    public class OperationResult<T>
    {
         T Result { get; set; }
         string Message { get; set; }
         bool IsSuccessful { get; set; } // можно заменить на enum с бОльшим количеством вариантов
    }
    Ответ написан
    Комментировать
  • Где можно получить втыка за свой код и где подскажут как лучше сделать? И заодно поучится на ошибках других?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Говнокод.ру полагаю :)

    А если серьёзно, то мне помогли книжки по паттернам программирования и хорошему коду. Правда не сразу - года через три. Поначалу только мешали :)
    Ответ написан
  • Как правильно "подписаться" на событие Completed у вложенных Storyboard?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Покажите код и можно будет придумать решение.
    Ответ написан
    Комментировать
  • Как изменить алгоритм масштабирования к иконке в окне (WPF)?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Вообще, любое масштабирование приводит к потере качества. Никакое сглаживание ситуацию не спасает.

    Что касается иконки в заголовке окна, то она рендерится не силами WPF, насколько мне известно, а самим dwm, поэтому разметкой ничего не решить. Разве что делать кастомный заголовок.

    Лучше всего будет нарисовать иконку размер в размер. Или несколько иконок под разные dpi. По крайней мере, мы в своих проектах поступаем с картинками именно так.
    Ответ написан
    Комментировать
  • С чего начать изучать C#?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Книжка Microsoft в соавторстве с intuit, C# для школьников - отличное начало.

    А потом Троелсен.
    Ответ написан
    Комментировать
  • Как осуществить соединение SQL в новой форме?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Появляется и пропадает - ненормальное поведение. Цепляйтесь дебаггером и пошагово смотрите, в чём проблема.
    Ответ написан
    Комментировать
  • Как передать переменную в значение атрибута?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Атрибуты - это метаданные вашего кода. Они "работают" в основном на этапе компиляции, превращаясь в типовые конструкции в выходном IL. Использовать run-time переменные в атрибутах просто некорректно.

    В вашем случае, полагаю, смысл использования параметра в атрибуте располагает к использованию вместо этого перегруженных конструкторов или дженериков.
    Ответ написан
    Комментировать
  • C# Portable Class Library async property, как бы сделать попрямее код?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Не очень понимаю, зачем вам асинхронный геттер.

    Сделайте в модели асинхронный метод, который получает значение и заносит его в поле, связанное с UI. Метод можно вызывать в конструкторе, или по таймеру, или через команду - как нужно.

    Если не нравится, что пока идёт загрузка, в UI показывается значение по умолчанию - тут уже варианты, от банального FallbackValue при связывании до конвертеров и кастомных полей (как-то для такой цели я сделал поле модели типа string, при асинхронной загрузке заносил туда значение типа "loading...", а после успешной загрузки клал туда отформатированное в string значение).
    Ответ написан
    Комментировать
  • Не изменяет данные из Team Foundation Server?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Когда ваш проект находится под управлением TFS и он не в состоянии checked out, то все файлы проекта помечаются атрибутом read only. Если нет соединения с TFS, перезапустите студию и она будет предлагать снять атрибут при обращении к файлу.

    Атрибут можно снять ручками в свойствах файла в обычном проводнике, но могут быть проблемы с неучтёнными изменениями при check-in.
    Ответ написан
    Комментировать
  • Binding Selected TreeNode как это сделать при динамическом биндинге?

    @i_light
    Могу WPF/Silverlight, EF, WCF, T4, ищу работу Мск
    Задайте имя (например, MyControl) элементу с нужным контекстом (в вашем случае нужному HierarchicalDataTemplate) и связывайте через него с полем SelectedItem в модели

    <Grid Name="LayoutRoot">
       <Grid.DataContext>
          <MyModel SelectedItem={Binding DataContext, ElementName=MyControl}>
       </Grid.DataContext>
    ...
    Ответ написан
    5 комментариев