Задать вопрос
  • Как использовать события для ListView в WPF C#?

    JustJoe_066
    @JustJoe_066 Автор вопроса
    VoidVolker, в общем так как Ваш код показался мне по сложности сопоставимым с ядерным реактором, пришлось немного похимичить, код новичковый, но в этом его плюс, другие люди такого же уровня как я, кто сюда зайдёт могут применить то же самое, а Вы, если будет настроение, быть может сказать о косяках как senior программист:

    xaml код с ПрИ "schemas.microsoft.com/xaml/behaviors" и библиотекой Microsoft.Xaml.Behaviors.Wpf:

    <!-- Список файлов и директорий -->
    <ListView x:Name="DirectoryDataEntitiesList" ItemsSource="{Binding DirectoryDataEntities}" Margin="10,85,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="190" Width="210">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <i:InvokeCommandAction Command="{Binding SelectDirectoryCommand}" CommandParameter="{Binding SelectedItem, ElementName=DirectoryDataEntitiesList}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Имя директории" Width="135" DisplayMemberBinding="{Binding DirectoryName}"/>
                <GridViewColumn Header="Выбрать" Width="65">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Grid HorizontalAlignment="Stretch">
                                <CheckBox IsChecked="{Binding IsChoised}" HorizontalAlignment="Center" IsEnabled="False"/>
                            </Grid>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
    <Button Command="{Binding CurrentDirectories}" Margin="10, 280, 0, 0"  Height="25" Width="210" Content="Текущие папки" HorizontalAlignment="Left" VerticalAlignment="Top"/>
    <ListView x:Name="FileDatasList" ItemsSource="{Binding FileDatas}" Margin="250,85,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="219" Width="210">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <i:InvokeCommandAction Command="{Binding SelectFileCommand}" CommandParameter="{Binding SelectedItem, ElementName=FileDatasList}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <ListView.View>
            <GridView>
                <GridViewColumn Header="ID" Width="50" DisplayMemberBinding="{Binding ID}" />
                <GridViewColumn Header="Имя файла" Width="150" DisplayMemberBinding="{Binding FileName}"/>
            </GridView>
        </ListView.View>
    </ListView>


    view model:

    public ICommand SelectFileCommand { get; }
            public ICommand SelectDirectoryCommand { get; }
    
            public EntryWindowViewModel()
            {
                SelectFileCommand = new RelayCommand(SelectFile);
                SelectDirectoryCommand = new RelayCommand(SelectDirectory);
            }
    
            private void SelectFile(object parameter)
            {
                try
                {
                    MessageBox.Show("^^^^");
                }
                catch (Exception e)
                {
                    MessageBox.Show("Возникла неустранимая ошибка:\n" + e.Message + "\n\nСообщите о проблеме разработчику.");
                }
            }
    
            private void SelectDirectory(object parameter)
            {
                try
                {
                    MessageBox.Show("$$$*");
                }
                catch (Exception e)
                {
                    MessageBox.Show("Возникла неустранимая ошибка:\n" + e.Message + "\n\nСообщите о проблеме разработчику.");
                }
            }


    пришлось правда отдельно прописывать реализацию ещё одного Command (чтоб не возникло конфликта имён - я его обозвал RelayCommand) :

    public class RelayCommand : ICommand
        {
            private readonly Action<object> _execute;
            private readonly Func<object, bool> _canExecute;
    
            public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
            {
                _execute = execute ?? throw new ArgumentNullException(nameof(execute));
                _canExecute = canExecute;
            }
    
            public event EventHandler CanExecuteChanged
            {
                add { CommandManager.RequerySuggested += value; }
                remove { CommandManager.RequerySuggested -= value; }
            }
    
            public bool CanExecute(object parameter)
            {
                return _canExecute == null || _canExecute(parameter);
            }
    
            public void Execute(object parameter)
            {
                _execute(parameter);
            }
        }
    Написано
  • Как использовать события для ListView в WPF C#?

    JustJoe_066
    @JustJoe_066 Автор вопроса
    А можно ли провернуть подобное во viewmodel файле? (файл, который содержит свойства, к которым биндятся элементы окна приложения)
    Написано
  • Как использовать Bitmap в .NET в 7.0?

    JustJoe_066
    @JustJoe_066 Автор вопроса
    MVV, сработало, скачал пакет для NET7, прокинул в настройках проекта что только для windows и всё сработало, спасибо
    Написано
  • Как использовать Bitmap в .NET в 7.0?

    JustJoe_066
    @JustJoe_066 Автор вопроса
    x86, Windows 10
    Написано
  • Как использовать Bitmap в .NET в 7.0?

    JustJoe_066
    @JustJoe_066 Автор вопроса
    кинет исключение "System.Drawing.Common is not supported on this platform", если добавить этот пакет
    Написано
  • Как добавить одно поле множеству классов без применения наследования и добавления поля в каждый класс по отдельности?

    JustJoe_066
    @JustJoe_066 Автор вопроса
    MVV, в общем ладно, понял, лучше оставить всё как есть , ни один из приведённых советов проблемы не решает, а значит всё так как и должно быть
    Написано
  • Как добавить одно поле множеству классов без применения наследования и добавления поля в каждый класс по отдельности?

    JustJoe_066
    @JustJoe_066 Автор вопроса
    без понятия что такое миксины, ну да ладно
    на самом деле мне хотелось избавиться от двух классов ViewedDirectoryData и ViewedOutputData, что может есть способ написать какой то универсальный класс например через T (способ нерабочий, так что его забываем)
    Написано
  • Как добавить одно поле множеству классов без применения наследования и добавления поля в каждый класс по отдельности?

    JustJoe_066
    @JustJoe_066 Автор вопроса
    Without AnyName, если говорить конкретнее, то чисто для того, чтоб сделать код удобнее, а то получается какое то уродство:
    Вот сущности, которые по задумке должны возыметь дополнительное поле но без добавления его непосредственно в потребляющий класс:
    /// <summary>
        /// Базовая сущность для хранения имён директорий
        /// </summary>
        public class DirectoryDataEntity
        {
            /// <summary>
            /// Имя директории
            /// </summary>
            public string DirectoryName { get; set; }
        }
    
    
        /// <summary>
        /// Выходной набор данных для одного результата по алгоритму
        /// </summary>
        public class OutputData
        {
            /// <summary>
            /// Содержит название метода
            /// </summary>
            public string MethodName { get; set; }
            /// <summary>
            /// Содержит результаты работы алгоритмов
            /// </summary>
            public double X { get; set; }
            /// <summary>
            /// Содержит неопределённость результатов работы алгоритмы
            /// </summary>
            public double U { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public double InterLabVariance { get; set; }
        }


    А вот классы, которые пока используются, и которые необходимо заменить, чтоб код не был уродлив:

    public class ViewedDirectoryData : DirectoryDataEntity
        {
            public bool IsChoised { get; set; }
        }
    
    
        public class ViewedOutputData : OutputData
        {
            public bool IsChoised { get; set; }
        }
    Написано
  • Как преобразовать UNION-запрос в простой?

    JustJoe_066
    @JustJoe_066 Автор вопроса
    Rsa97, будете долго и упорно смеяться, используется Access
    Написано
  • Как преобразовать UNION-запрос в простой?

    JustJoe_066
    @JustJoe_066 Автор вопроса
    Rsa97, преподы в универе настолько шибанутые, что заставляют подобным заниматься
    Написано