2012-06-21 2 views
0

У меня есть свойство int в моей модели viewmodel, которая возвращает пользовательское свойство класса. Я проверяю, является ли ссылка класса нулевой, и в этом случае я хочу вернуть некоторое пустое значение в представление, чтобы НЕ показывать какое-либо значение.WPF Property return int null

Код выглядит так:

public int percentage 
{ 
get { 
    if (customClass != null) 
    { 
     return customClass.getInt(); 
    } 
    else 
    { 
     return 0; 
    } 
... 
} 

ответ

4

Если вы хотите, чтобы вернуть результат «нет значения», вы должны вернуть null. Поскольку это не является допустимым значением для int, вы должны изменить тип свойства, чтобы быть int? вместо:

public int? Percentage 
{ 
    get { return customClass == null ? null : customClass.getInt(); } 
} 

Если вы еще не видели синтаксис раньше, int? представляет собой сокращенную System.Nullable<int>.

Не забывайте, что вы также можете преобразовать значение Percentage во все, что вам нравится на самом деле изнутри, указав подходящий Converter для привязки.

+0

Спасибо за ответ. Я слышал об ошибке, но никогда не использовал ее. Только один вопрос, теперь в моем сеттер, как мне преобразовать int? к int? Просто потому, что я не хочу менять свой тип класса. – Louro

+0

@Louro: Это зависит от того, что означает «null» в этом случае, и даже если это имеет смысл вообще, учитывая вашу бизнес-логику. Например, что делает 'customClass'? Что такое 'getInt()' предполагается моделировать? Что это значит, что 'customClass == null'? – Jon

+0

My customClass инициализируется нулем, а затем назначается с возвратом вызова службы. Когда вызов службы имеет некоторую ошибку, customClass имеет значение NULL. В этом случае я хочу, чтобы представление не показывало никакого значения. – Louro

1

int - тип значения, поэтому не может быть пустым. Вместо этого вы можете вернуть int? (что является сокращением для Nullable<int>), которое может быть нулевым, или вы можете указать определенное значение int, такое как 0, если это необходимо для customClass == null. Это, конечно, зависит от ваших требований.

public int? Percentage { 
    get { 
     if (customClass != null) 
      return customClass.getInt(); 
     else 
      return null; 
    } 
} 

Все, что вызывает Percentage нужно будет проверить Percentage.HasValue, чтобы увидеть, если это пустое или нет, и использовать Percentage.Value для извлечения фактического целого числа, которое будет работать, если Percentage.HasValue является true.