我正在尝试在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; }
}
但没有运气,没有任何反应。
有人能指出我正确的方向吗?
答案 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}"