Заморочка интересная с WPF binding
Сорри, тогда я так и не понял что именно вы хотели там пояснить.
как вы тогде вообще что-то начали высказывать? логичным было бы начать с того, что не понял. я вот вас не понял - спрашиваю, а не утверждаю (пока), что это - бред. а у вас уже без понимания решение лежит.
Ну если вы изложите точно что вам требуется, я еще могу попробовать сделать пример.
зачем? вы ведь уже поняли?
Хотите контрол с двумя кнопочками, управляемый внешним объектом?
не знаю, что это такое, но очень хочу : )
логичным было бы начать с того, что не понял
сразу первый пост
Сорри, что написано вроде как понятно, но в чем проблема так и не понял.
не знаю, что это такое, но очень хочу
Да не за что. Я только до сих и не знаю правильно Вас понял или нет. С одной стороны вроде бы да, а судя по реакции нет.
Специально сделал DepencyProperty принимающий объект, который присваивается только раз, но вот менять состояние этого объекта можно сколько угодно. По крайней мере, именно так я понял Вашу проблему.
Если что не так, меняйте как требуется, бум разбираться дальше.
посмотрел. не заработало, пока не добавил в хамле основного окна DataContext ("нормальный", не DesignInstance).
после этого заработало. клацаешь на чекбоксы, клавиши появляются/исчезают.
но мне кажется, было бы проще и понятней вместо создания DependencyProperty в SampleUserControl.cs (лишнего, мне кажется), просто описать в MainWindow.xaml этот контрол вот так
<Views:SampleUserControl DataContext="{Binding StateContainerMain}" />
и будет достигнута та же цель: присвоение контролу DataContext.
кроме того, я начинал всю эту ветку о том, как срабатывает изменение OnPropertyChanged, где property - DependencyProperty типа object. мне кажется, Visibility - это enum, и срабатывает все как и в случае примитива.
т.е. я не понял, что этот пример мне хотел продемонстрировать/предложить.
но посмотреть было интересно. еще раз спасибо : )
посмотрел. не заработало, пока не добавил в хамле основного окна DataContext ("нормальный", не DesignInstance).
Странно и ехе не заработало? DesignInstance я для решарпера делаю. Код и ехе от одного бильда.
но мне кажется, было бы проще и понятней вместо создания DependencyProperty
Ну так специально ради использования DependencyProperty и сделал и специально указал, что пример. Я так никогда и не делаю
как срабатывает изменение OnPropertyChanged, где property - DependencyProperty типа object
Смысл остается тем же, нужно еще что то, что говорит об изменении самого объекта.
Сделаем и с объектом... тоже есть варианты, возьмем, как говорите, самый дебильный
еще одна заморочка. пишем
EventManager.RegisterClassHandler(typeof(Window), System.Windows.Controls.Control.KeyDownEvent, new KeyEventHandler(keyDown), true);
keyDown выглядит так:
void keyDown(object sender, KeyEventArgs e) {
как узнать, который из альтов был нажат, левый или правый? в e.KeyboardDevice.Modifiers в обоих случаях стоит просто Alt. ясно, можно опросить все клавиши на предмет нажата или нет, но это неудобно, хотелось бы попроще. может, в этом "е" вся инфа уже имеется, я ее просто не вижу?
я не призываю вас делать "дебильные вещи". и вообще никаких вопросов в моем первом посту не содержится. я просто опыт свой печальный описал. вижу, для вас то, что мне было неизвестно, просто очевидно. молодец! вайтер зо! : )
это то, что видно при нажатии алта. без проблем, но это мне известно и не нужно. вы скажите, как при нажатии, скажем, клавиши 'A' определить, нажат ли при этом ПРАВЫЙ алт? я не хочу запоминать его состояние когда его опускают-поднимают.
но мне уже это просто интересно, но не необходимо, я совсем другое решение придумал.
в e.KeyboardDevice.Modifiers в обоих случаях стоит просто Alt
А у меня нет
Левый alt = Alt Правый alt = ALT, Control
Можно еще и так проверить, но надежного способа пока не нашел. Чтобы работал при любой последовательности нажатий.
KeyStates keyState1 = e.KeyboardDevice.GetKeyStates(Key.LeftAlt);
KeyStates keyState2 = e.KeyboardDevice.GetKeyStates(Key.RightAlt);
не а. Винда английская, а раскладка была русской, да и не зависит от раскладки. Только что попереключал.
Значит не от раскладки, давно я не брал в руки шашек. Но Alt+Ctrl вместо правого альта посылают "немецкие" клавиатуры у которых Alt Gr вместо правого Alt.
делает что-то другое?
Ну оно же должно само ещё и внутри person-а за всеми полями следить!
В этом же расстройство было. Вешаем OnChange на проперть person и возмущаемся а почему оно само не следит что у объекта, на который указывает person, пропертя меняются.
А ты предлагаешь самому, ручками за person.age следить. Ни стыда ни совести! :)
А ты предлагаешь самому, ручками за person.age следить. Ни стыда ни совести! :)
Не предлагаю :) Код 1 в 1 как у moose:
_person.Age++; OnPropertyChanged ("person");
и мой:
_person.Age++; PropertyChanged(this, new PropertyChangedEventArgs("Person"));
В чем тут разница? :)
PS: Person в моем примере не унаследована от INotifyPropertyChanged (если ты об этом)
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string n, int a)
{
Name = n;
Age = a;
}
}
PropertyChanged(this, new PropertyChangedEventArgs("Person"));
Для демки, конечно никакой разницы. Но иметь такое в нормальной проге
Обычно так
PropertyChanged();
Раньше было так
PropertyChanged(nameof(Person));
В разных расширениях может быть еще встроенная проверка на ==, соответсвенно количество аргументов чуть больше