Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2016, 20:30   #11
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

а можно вот это заменить не для всех контролов а только для конкретных кнопок и вместо IsSomething поставить IsEnabled конкретной кнопки???
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 20:31   #12
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

вот это ведь гораздо компактнее и не надо реализовывать никаких лишних свойств, проблема только в том чтобы инвертировать свойство IsEnabled у Button2, неужели нельзя это никак сделать чисто в xaml?
Код:
<Button Name="Button1" IsEnabled="{Binding ElementName=Button2, Path=IsEnabled}"/>
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 20:41   #13
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Про инвертирование я ж написал выше, конвертер или DataTrigger.

Но тут проблема в том, что тогда при нажатии кнопок надо же менять IsEnabled кнопки в коде. И тогда биндинг вроде сломается.

Цитата:
к тому же у вас столько кода вышло что мне проще тупо в обработчиках обоих кнопок прописать
Ну от задачи зависит, когда больше логики, чем просто отключение двух кнопок, то не проще + в WPF обычно принято использовать MVVM, тогда больше смысла в этом всем.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.03.2016, 20:44   #14
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

тут меня осенила одна простая и гениальная идея:
Код:
<Button Name="Button1" IsEnabled="{Binding Button2_IsEnabled, Mode=OneWay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, IsAsync=True}"/>
и в коде окна
Код:
public bool Button2_IsEnabled { get { return !Button1.IsEnabled; } }
но даже это почему то не работает, хотя должно работать!
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 20:47   #15
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

ладно в топку ту задачу, пропишу в коде c#, там одна строка всего лишь какая разница... вот с этим как быть?
Цитата:
Сообщение от NewLamer&Programer Посмотреть сообщение
И еще чтобы кнопка была IsEnabled = false если в таблице не выбрана запись.
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 20:51   #16
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
но даже это почему то не работает, хотя должно работать!
Наверно без INPC в set как в том примере кнопки не знают о том, что свойство поменялось.

Вообще для отключения кнопок проще Command с CanExecute использовать.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.03.2016, 20:53   #17
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
без INPC
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Command с CanExecute
шта???
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 21:06   #18
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

INPC=INotifyPropertyChanged, как в примере раньше

Про команды гугл или книжку по WPF в помощь

Код:
        <Button Command="{Binding DoSomething1Command}"/>
        <Button Grid.Row="1" Command="{Binding DoSomething2Command}"/>
Код:
using System;
using System.Windows;
using System.Windows.Input;

namespace WpfApplication5
{

    /// <summary>
    /// from http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090030 or MvvmLight
    /// </summary>
    public class RelayCommand : ICommand
    {
        readonly Action<object> _execute;
        readonly Predicate<object> _canExecute;

        public RelayCommand(Action<object> execute)
            : this(execute, null)
        {
        }

        public RelayCommand(Action<object> execute, Predicate<object> canExecute)
        {
            if (execute == null)
                throw new ArgumentNullException("execute");

            _execute = execute;
            _canExecute = canExecute;
        }

        public bool CanExecute(object parameter)
        {
            return _canExecute == null ? true : _canExecute(parameter);
        }

        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }

        public void Execute(object parameter)
        {
            _execute(parameter);
        }
    }


    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            DataContext = this;

            IsSomethingActive = false;
        }

        public bool IsSomethingActive { get; set; }

        private RelayCommand _doSomething1Command;
        public RelayCommand DoSomething1Command
        {
            get
            {
                return _doSomething1Command
                       ?? (_doSomething1Command = new RelayCommand(DoSomething, CanexExecuteDoSomething1));
            }
        }

        private RelayCommand _doSomething2Command;
        public RelayCommand DoSomething2Command
        {
            get
            {
                return _doSomething2Command
                       ?? (_doSomething2Command = new RelayCommand(DoSomething, CanexExecuteDoSomething2));
            }
        }

        private void DoSomething(object o)
        {
            IsSomethingActive = !IsSomethingActive;
        }

        private bool CanexExecuteDoSomething1(object o)
        {
            return !IsSomethingActive;
        }

        private bool CanexExecuteDoSomething2(object o)
        {
            return IsSomethingActive;
        }
    }
}
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.03.2016, 21:14   #19
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

о боже ж ты мой ну почему опять такое количество кода ради такого минимального эффекта? ни за что не поверю что нельзя это все задать просто в xaml
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 21:34   #20
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

короче все, хорош с меня этой лабуды, сделал все через простые обработчики нажатия кнопок и изменения состояния выделения таблицы, я был о xaml более высокого мнения честно скажу
NewLamer&Programer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C# + WPF] Отлов нажатий клавиш, хуки, горячие клавиши в проекте WPF Casper-SC WPF, UWP, WinRT, XAML 3 03.03.2017 15:00
триггеры на 2 контрола в WPF на basic.net Air_ Помощь студентам 0 12.01.2011 00:15
Триггеры МартинИ SQL, базы данных 4 23.12.2010 20:12
класс Screen в WPF. Есть ли такой? [?] Не добавлять же сборку Forms в WPF Casper-SC Общие вопросы .NET 2 30.07.2010 15:10
C++ Триггеры phantom4eg Помощь студентам 6 15.05.2010 14:49