Xaml UserControl上的DataContext更改未更新子控件';s属性
我有一个简单的控件:Xaml UserControl上的DataContext更改未更新子控件';s属性,xaml,binding,windows-phone-8,Xaml,Binding,Windows Phone 8,我有一个简单的控件: <UserControl x:Class="MyProject.Controls.ImageToggleButton" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://
<UserControl x:Class="MyProject.Controls.ImageToggleButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="480"
d:DesignWidth="480"
Loaded="OnLoaded"
Tap="OnTap"
Background="{x:Null}">
<Image x:Name='ButtonImage' />
</UserControl>
此控件包含在另一个UserControl
中,该控件用作LongListSelector.ItemTemplate
的DataTemplate
(Some xaml snipped for brevity...)
<UserControl ...>
<Grid>
<controls:ImageToggleButton Grid.Column="0"
CheckedImage="/Assets/icon_checked.png"
UncheckedImage="/Assets/icon_unchecked.png"
IsChecked="{Binding Store.IsSelected}"
Height="48" />
</Grid>
</UserControl>
我的问题是,当
LongListSelector
为父控件设置新的DataContext
时,IsChecked
值在图像上没有正确更新。在应用程序运行该特定代码段时检查调试输出。您没有看到任何绑定错误吗?另外,我假设您的视图模型实现了INotifyPropertyChanged(正确更改)?没有绑定错误,并且VM派生自NotificationObject
,并实现了Store
s属性的集合。请尝试使用Snoop()检查ImageToggleButton的数据上下文。看起来您的DataContext将被正确继承(除非您在这里没有看到的代码中显式/本地地设置它)。我们可以看到从IsSelected的setter调用的this.Set方法的实现吗(我没有看到它是NotificationObject的成员,所以我假设是您编写的)?
(Some xaml snipped for brevity...)
<UserControl ...>
<Grid>
<controls:ImageToggleButton Grid.Column="0"
CheckedImage="/Assets/icon_checked.png"
UncheckedImage="/Assets/icon_unchecked.png"
IsChecked="{Binding Store.IsSelected}"
Height="48" />
</Grid>
</UserControl>
public class Store : NotificationObject
{
private bool isSelected;
public bool IsSelected
{
get { return isSelected; }
set { this.Set(() => IsSelected, ref IsSelected, value); }
}
}