我正在尝试在 WPF 中的第一个自定义用户控件上使用数据绑定(bind)。不幸的是,用户界面永远不会收到更新。
自定义用户控件声明:
<views:EpisodeDetailsUserControl
x:Name="EpisodeDetailsUserControl"
DataContext="{Binding Episode}"/>
自定义用户控件xaml(片段):
<Label
x:Name="TvShowNameLabel"
Grid.Row="0"
Grid.Column="1"
DataContext="{Binding TvShowName}" />
<Label
x:Name="SeasonIdLabel"
Grid.Row="1"
Grid.Column="1"
DataContext="{Binding SeasonId}" />
我预计用户控件会在以下情况下更新:
private void DowloadedEpisodesListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var episode = DowloadedEpisodesListView.SelectedItem as IEpisode;
if (episode != null)
{
EpisodeDetailsUserControl.DataContext = episode; // <======
}
}
为了完整起见,IEpisode
public interface IEpisode
{
string FileName { get; }
string FullPath { get; }
string Directory { get; }
string Extension { get; }
string TvShowName { get; set; }
int SeasonId { get; set; }
int Id { get; set; }
string Name { get; }
bool IsValid { get; }
string NewFileName { get; }
string RenameProposal { get; }
}
但运气不好,什么也没发生。
有人能指出我正确的方向吗?
最佳答案
您应该绑定(bind)标签 Content
属性而不是 DataContext
:
<Label x:Name="SeasonIdLabel"
Grid.Row="1" Grid.Column="1"
Content="{Binding SeasonId}" />
此外,您可能可以直接将 EpisodeDetailsUserControl.DataContext
绑定(bind)到 DowloadedEpisodesListView
,以在代码隐藏中删除该事件处理程序:
DataContext="{Binding ElementName=DowloadedEpisodesListView, Path=SelectedItem}"
关于c# - WPF DataContext 不更新子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20022387/