c# - WPF DataContext 不更新子级

标签 c# wpf data-binding custom-controls

我正在尝试在 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/

相关文章:

c# - 是否有在 UserNamePasswordValidator 之前调用的 WCF 扩展点?

c# - 在 C# 或 JS 中更改我的 css 样式时加载其他页面

.net - 有没有好的 WPF 图表制作者/工具包/提供者?

wpf - 如何使用与路径不同的源将数据绑定(bind)到 CLR 对象

xamarin - 如何将可观察集合绑定(bind)到 xamarin 中的 flexlayout?

c# - 转换器应该抛出任何类型的异常吗?

c# - 将矩阵数组绑定(bind)到 WPF DataGrid

WPF滚动条可调整大小的窗口

c# - 在 Dispatchertimer.Tick 事件中发送一个额外的参数

wpf - 棘手的 WPF 绑定(bind)