Özel bir DependencyProperty
olan bir UserControl var. UserControl'ü bir DataTemplate
içinden kullandığımda, DependencyProperty
değerini ayarlayamıyorum. UserControl'ü doğrudan bir pencerede kullanırsam, DependencyProperty
düzgün çalışır. Uzun gönderi için özür dilerim, kodu projemde hala sorunu gösteren minimum düzeye getirdim. Herhangi bir yardım için teşekkürler, başka ne denemem gerektiğini bilmiyorum.Denetim bir DataTemplate'de kullanıldığında neden bir UserControl içindeki özel özellik ayarlanmadı?
Ana Pencere XAML:
<Window ...>
<Window.Resources>
<DataTemplate DataType="{x:Type local:TextVM}">
<local:TextV MyText="I do not see this"/> <!--Instead I see "Default in Constructor"-->
</DataTemplate>
</Window.Resources>
<Grid>
<Border BorderThickness="5" BorderBrush="Black" Width="200" Height="100" >
<StackPanel>
<ContentControl Content="{Binding Path=TheTextVM}"/>
<local:TextV MyText="I see this"/>
</StackPanel>
</Border>
</Grid>
</Window>
Ana Pencere Kodu:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
TheTextVM = new TextVM();
}
public TextVM TheTextVM { get; set; }
}
UserControl XAML:
<UserControl ...>
<Grid>
<TextBlock x:Name="textBlock"/>
</Grid>
</UserControl>
UserControl Kodu:
public partial class TextV : UserControl
{
public TextV()
{
InitializeComponent();
MyText = "Default In Constructor";
}
public static readonly DependencyProperty MyTextProperty =
DependencyProperty.Register("MyText", typeof(string), typeof(TextV),
new PropertyMetadata("", new PropertyChangedCallback(HandleMyTextValueChanged)));
public string MyText
{
get { return (string)GetValue(MyTextProperty); }
set { SetValue(MyTextProperty, value); }
}
private static void HandleMyTextValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs args)
{
TextV tv = d as TextV;
if(tv != null) tv.textBlock.Text = args.NewValue.ToString();
}
}
Çok teşekkürler! Kurucudaki başlatmayı düşünmedim. Benim durumumda, özellik bir zaman damgasıdır ve statik özellik kaydı gerçekleştiğinde değil, nesne oluşturulduğunda varsayılan değere sahip olmasını istedim. Ancak bu özellik zaten bir VM'ye bağlı, bu yüzden şimdi bunu VM'de başlatacağım. Bu şimdi için yapacak, ama yine de kontrol pencerede koyarak ve DataTemplate içine koyarak arasındaki farka şaşırıyor. Bu arada, MyText'in VM'ye bağlanması, MyText'in yapıcıda başlatılması durumunda aynı sorunu gösterir. – Carlos
Sorunu muhtemelen MSDN forumlarında göndermelisiniz, böylece MS'den bir kişi cevap verebilir. Bu davranış bir hata olabilir düşünüyorum –
http://msdn.microsoft.com/en-us/library/ms754209.aspx – SLaks