标题说明了一切......
我的DependencyProperty的代码如下:
public object IsChecked
{
get { return GetValue(IsCheckedProperty); }
set { SetValue(IsCheckedProperty, value); }
}
public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(object),
typeof(MyCheckbox),
new PropertyMetadata(false, IsCheckedChanged));
private static void IsCheckedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var checkbox = d as MyCheckbox;
bool? newvalue = null;
if (e.NewValue is bool?)
newvalue = (bool?)e.NewValue;
else if (e.NewValue != null)
{
bool newbool;
if (!bool.TryParse(e.NewValue.ToString(), out newbool))
return;
newvalue = newbool;
}
if (checkbox != null && !checkbox.Checked.Equals(newvalue))
checkbox.Checked = newvalue;
}
我像这样绑定到那个属性:
<local:MyCheckbox IsChecked="{Binding Stata,UpdateSourceTrigger=PropertyChanged}" />
Stata的实施方式如下:
private bool? _stata = null;
public bool? Stata
{
get { return _stata; }
set
{
_stata = value;
OnPropertyChanged();
}
}
当Stata更改为“true”时,MyCheckbox会按预期更新。但是,当Stata以null开头或更改为null时,MyCheckbox不会获得更新,IsCheckedChanged不会触发。
如果我将my属性的默认值更改为null,则为:
public static readonly DependencyProperty IsCheckedProperty =
DependencyProperty.Register("IsChecked",
typeof(object),
typeof(MyCheckbox),
new PropertyMetadata(null, IsCheckedChanged));
它再次按预期工作,只要IsCheckedChanged
更改为Stata
/ true
和false
,就会调用null
。
这是一个错误吗?我希望我的默认值为false
,而不是null
,我怎么能意识到这一点?
编辑:我已将示例解决方案上传到GitHub,而现在调用Changed函数,当值为null
时,UWP的显示结果不同
您可以在此处找到存储库:https://github.com/ManIkWeet/DependencyPropertyTest
答案 0 :(得分:1)
单击复选框时,该值将变为本地值,并且绑定将丢失。您可以使用命令更新您的状态。关于如何做到这一点有很多文章。
调试时你可能已经发现了两件事。 1)堆栈是不同的,我也注意到2)输出窗口中的错误:转换器无法将类型'Windows.Foundation.Boolean'的值转换为类型'IReference`1'现在正在搜索这个我发现:{{3根本原因似乎是基于com的,不支持nullables。