WPF DataContext不更新子项

时间:2013-11-16 18:54:44

标签: c# wpf data-binding custom-controls

我正在尝试在WPF中的第一个自定义用户控件上使用数据绑定。不幸的是,UI永远不会收到更新。

自定义用户控制声明:

<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; }
}

但没有运气,没有任何反应。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

您应该绑定标签Content属性而不是DataContext

<Label x:Name="SeasonIdLabel" 
       Grid.Row="1" Grid.Column="1" 
       Content="{Binding SeasonId}" />

此外,您可能可以直接将EpisodeDetailsUserControl.DataContext绑定到DowloadedEpisodesListView以摆脱代码隐藏中的事件处理程序:

DataContext="{Binding ElementName=DowloadedEpisodesListView, Path=SelectedItem}"