Исключение не отображается - PullRequest
0 голосов
/ 28 июня 2010

у меня есть:

 public class Person : INotifyPropertyChanged
    {
       private string _name;

        public int Age { get; set; }

        public string Name
        {
            get { return _name; }
            set
            {
                if (!String.IsNullOrEmpty(_name))
                {
                    if (String.IsNullOrEmpty(value))
                    { 
                       throw new Exception("name couldn't be null");



                    }
                    else if ((_name.Equals(value) != true))
                    {
                        if (!String.IsNullOrEmpty(value))
                        {
                            throw new Exception("name couldn't be null");
                        }
                        else
                        {
                            InvokePropertyChanged("_name");
                        }


                        _name = value;
                    }

                }

                else if (String.IsNullOrEmpty(value))
                {
                    throw new Exception("name couldn't be null");
                }
                else
                {
                    _name = value;
                }

            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void InvokePropertyChanged(string propertyName)
        {

            var e = new PropertyChangedEventArgs(propertyName);

            PropertyChangedEventHandler changed = PropertyChanged;

            if (changed != null) changed(this, e);

        }

>
<Grid>
    <StackPanel>
        <TextBox Name="tbName" Text="{Binding Path=Name, Mode=TwoWay}"></TextBox>
        <TextBox Name="tbOther" Text="Come in"></TextBox>
    </StackPanel>
</Grid>

и

 public UserControl1()
        {
            InitializeComponent();

            Person person = new Person();
            person.Name = "Patrick";

 this.DataContext = person;

        }

Почему, когда я отлаживаю и вхожу в строку:

выбросить новое исключение («имя не может быть нулевым»);

исключение не отображается.

Ответы [ 4 ]

2 голосов
/ 28 июня 2010

Пожалуйста, посмотрите этот другой вопрос , но в основном исключение будет обработано и подавлено Привязкой.

1 голос
/ 28 июня 2010

попробуйте сделать это:

...
else if (String.IsNullOrEmpty(value))
{
    try{
        throw new Exception("name couldn't be null");
    }
    catch(Exception ex)
    {
         //Set Breakpoint Below
         int x=0;
    }
}
...

Вы увидите, что ваш код попадет в блок catch, и исключение будет сгенерировано.Однако обработка исключения остается за вами.Quartermeister уже предлагает лучший способ.

В противном случае, в зависимости от настроек VS IDE, исключение исключается, и на экране не появляется ошибка.

1 голос
/ 28 июня 2010

Я думаю, что вы хотите назначить объект Person для DataContext элемента управления:

public UserControl1()
{
    InitializeComponent();
    Person person = new Person();
    person.Name = "Patrick";
    this.DataContext = person;
}

Возможно, вы также захотите установить ValidatesOnExceptions в привязке, чтобы пользовательский интерфейс отображал шаблон ошибки при возникновении исключения в установщике.

<TextBox Name="tbName" Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnExceptions=True}"></TextBox>
1 голос
/ 28 июня 2010

Вы не устанавливаете элемент управления для привязки к объекту вашего человека из того, что я вижу.Как таковой, он не должен пытаться установить его и впоследствии вызывать ошибку.

Когда вы ставите точку останова в своем геттере, она даже вызывается?

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