cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)

As the others stated bool? is not equal to bool. bool? can also be null, see Nullable<t> (msdn).

If you know what the null state wants to imply, you easily can use the ?? - null-coalescing operator (msdn) to convert your bool? to bool without any side effects (Exception).

Example:

//Let´s say "chkDisplay.IsChecked = null" has the same meaning as "chkDisplay.IsChecked = false" for you
//Let "check" be the value of "chkDisplay.IsChecked", unless "chkDisplay.IsChecked" is null, in which case "check = false"

bool check = chkDisplay.IsChecked ?? false;

You've declared IsChecked as a bool? (Nullable<bool>). A nullable boolean can be either true, false or null. Now ask yourself: If IsChecked was null, then what value should be assigned to IsDisplay (which can only take a true or false)? The answer is that there is no correct answer. An implicit cast here could only produce hidden trouble, which is why the designers decided to only allow an explicit conversion and not an implicit one.


I'm facing your question when I'm using the null check operator ?.:

if (!RolesList?.Any()) //Not accepted: cannot convert bool? to bool

So I'm using this instead

if (RolesList?.Any() != true)
  //value is null or false

In your case you should set it like so:

obj.IsVisible = chkDisplayStuff.IsChecked ?? false;