Как сделать TextBox пустым, если его значение равно 0 - PullRequest
0 голосов
/ 08 мая 2020

В настоящее время я делаю решатель судоку в C# WPF. Я сделал многомерный массив размером 9x9. Каждый элемент этого массива является свойством, которое привязано к текстовому полю в моем представлении WPF.

Поэтому, прежде чем я смогу назначить его элементы свойству, я должен его инициализировать, потому что в противном случае я получил бы исключение нулевой ссылки. Мой код работает нормально, но после инициализации SudokuTable содержит только нули. Это, конечно, отлично подходит для вычислений, но я бы хотел, чтобы текстовые поля ничего не содержали.

Я новичок в C# и WPF, поэтому надеюсь, что вы можете мне помочь. Ниже вы найдете мою MainViewModel и одно из текстовых полей. Учтите, что привязка работает. Это просто 0 в TextBox, который мне не нужен.

MainViewModel:

    public class MainViewModel : ViewModelBase
    {
        public SudokuGrid SGrid { get; set; }

        public MainViewModel()
        {
            SGrid = new SudokuGrid();
            InitializeSudokuTable();
        }

        private void InitializeSudokuTable()
        {
            SudokuTable = new int[9, 9];  
        }

        public int[,] SudokuTable
        {
            get { return SGrid.SudokuTable; }
            set
            {
                if (SGrid.SudokuTable != value)
                {
                    SGrid.SudokuTable = value;
                    OnPropertyChanged("Grid");
                }
            }
        }

        #region Cells
        public int Cell00
        {
            get { return SudokuTable[0, 0]; }
            set
            {
                if (SudokuTable[0, 0] != value)
                {
                    SudokuTable[0, 0] = value;
                }
            }
        }
    }

TextBox Пример:

<TextBox MaxLength="1" Style="{StaticResource GridTextBox}" Text="{Binding Path=Cell00}"/>

1 Ответ

0 голосов
/ 08 мая 2020

nullable int

использовать обнуляемый int? в качестве типа свойства для Cell00:

private int _cell00 = 0;

public int? Cell00
{
    get
    {
        if (_cell00 == 0)
            return null;

        return _cell00;
    }
    set
    {
        if (value == null)
            _cell00 = 0;

        _cell00 = (int) value;
    }
}

string

с использованием строкового свойства и преобразования между строкой и int в геттере и сеттере тоже работает. но вы потеряете автоматическую c numeri c проверку текстового поля. Таким образом, он не предупредит вас, когда вы введете букву вместо числа.

private int _cell00 = 0;

public string Cell00
{
    get
    {

        if (_cell00 == 0)
            return string.Empty;

        return _cell00.ToString();
    }
    set
    {
        if (string.IsNullOrEmpty(value))
            _cell00 = 0;

        _cell00 = int.Parse(value);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...