У меня есть Downloader, которая имеет свойство прогрессировать, что:не может связываться с владельцем свойства зависимостей
public static readonly DependencyProperty ProgressProperty = DependencyProperty.Register("Progress", typeof(int), typeof(Downloader), new PropertyMetadata(0, new PropertyChangedCallback(OnProgressChange)));
public int Progress
{
get { return (int)this.GetValue(ProgressProperty); }
private set { this.SetValue(ProgressProperty, value); }
}
private static void OnProgressChange(DependencyObject @object, DependencyPropertyChangedEventArgs e)
{
Downloader d = @object as Downloader;
if (d.PropertyChanged != null) d.PropertyChanged(d, new PropertyChangedEventArgs("Progress"));
}
Когда я пытаюсь потреблять его в другой класс XAML (m_downloader частное поле Downloader тип):
<sdk:Label Height="24" HorizontalAlignment="Left" Margin="360,12,0,0" Name="ProgressLabel" VerticalAlignment="Top" Width="38" Content="{Binding Path=m_downloader.Progress, StringFormat='\{0\} %'}" />
ничего не происходит. Во время отладки я вижу, что d.PropertyChanged всегда имеет значение null. Как заставить его работать, чтобы показать прогресс в ярлыке?
EDIT 1:
m_downloader как это работает (после того, как временное изменение собственности):
public partial class AudioPlayer : UserControl
{
public AudioPlayer()
{
m_downloader = new Downloader();
InitializeComponent();
}
...
public Downloader m_downloader {get; private set;}
}
EDIT 2:
Я сделал связывание в Blend, он изменил xaml на это:
<UserControl x:Name="audioPlayer" x:Class="Media.Controls.AudioPlayer"
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="125" d:DesignWidth="410" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<Grid x:Name="LayoutRoot" Background="White">
...
<sdk:Label Height="24" HorizontalAlignment="Left" Margin="337,12,0,0" Name="ProgressLabel" VerticalAlignment="Top" Width="61" Content="{Binding m_downloader.Progress, ElementName=audioPlayer, Mode=OneWay}" />
...
</Grid>
</UserControl>
Почему ElementName имеет значение , вложенное, а не вложенное? Это не имеет смысла для меня ... Но он работает после этого изменения.
Если m_downloader является частным, вы не можете привязываться к нему. Он должен быть общедоступным. –
Я перешел на публичный, но все равно не повезло ... – deha
Вы уверены, что DataContext установлен правильно, поэтому вы можете привязываться к m_downloader? – Euphoric