C #, XAML, WPF: лучший способ сделать сложное связывание, включая текстовые поля и флажки - PullRequest
0 голосов
/ 26 июля 2011

У меня есть два текстовых поля и один флажок (и другие подобные случаи), где я хочу, чтобы базовые объекты данных (два целых), которые моя программа позже будет использовать, были равны тому, что находится в текстовых полях, если флажок не установлен, они должныв этом случае будет 0 и Int.max соответственно.

Какой лучший способ сделать это с привязками WPF?Я предполагаю, что я должен использовать мульти-привязки как-то?Другой возможностью было бы связать значения вместе, если это вообще возможно (?), Т.е. checkbox.IsChecked связывается с textBox.Text через какой-то пользовательский конвертер, который связывается с базовым объектом данных.

Как бы вы это сделали?Мне кажется, что множественные связи имеют смысл, когда множественные вещи как-то влияют друг на друга и что цепочка имеет больше смысла, где это возможно, верно?У меня есть один случай, который похож на вышеупомянутый, но также включает в себя ползунок.

Ответы [ 3 ]

1 голос
/ 26 июля 2011

Самый простой способ - использовать подход MVVM .Создайте ViewModel, которая реализует необходимую логику:

public class MyViewModel : ViewModelBase
{
    private int _min;
    public int Min
    {
        get { return _min; }
        set
        {
            _min = value;
            OnPropertyChanged("Min");
            OnPropertyChanged("ActualMin");
        }
    }

    private int _max;
    public int Max
    {
        get { return _max; }
        set
        {
            _max = value;
            OnPropertyChanged("Max");
            OnPropertyChanged("ActualMax");
        }
    }

    private bool _useMinMax;
    public bool UseMinMax
    {
        get { return _useMinMax; }
        set
        {
            _useMinMax = value;
            OnPropertyChanged("UseMinMax");
            OnPropertyChanged("ActualMin");
            OnPropertyChanged("ActualMax");
        }
    }

    public int ActualMin
    {
        get { return _useMinMax ? _min : 0; }
    }

    public int ActualMax
    {
        get { return _useMinMax ? _max : int.MaxValue; }
    }

}

Привязка текстовых полей к Min и Max и привязка CheckBox к UseMinMax.Затем используйте ActualMin и ActualMax, чтобы получить фактические значения для использования.

0 голосов
/ 26 июля 2011

Вы можете использовать MVVM.Вот оно, на видео плюс бесплатно:

http://windowsclient.net/learn/video.aspx?v=288066

0 голосов
/ 26 июля 2011

Я бы использовал подход MVVM. В слое view-model вы можете поместить любую логику, чтобы пользовательский интерфейс вел себя в соответствии с вашими целями. Просто, быстро и надежно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...