我在自定義UserControl
中遇到了一些與我的DependencyProperty
有關的問題。WinRT DependencyProperty從未設置
我需要以特定方式顯示有關人員的信息。爲了做到這一點,我有幾個UserControls
,收到List<PeopleList>
其中包含(顯然)一個或多個人。
讓我告訴你我的(簡化)代碼,然後我會向你解釋我的應用程序的實際行爲。
這裏是我的用戶:
public abstract class PeopleLine : UserControl
{
public static readonly DependencyProperty PeopleListProperty =
DependencyProperty.Register("PeopleList", typeof(List<PeopleModel>), typeof(PeopleLine), new PropertyMetadata(default(List<PeopleModel>)));
public List<PeopleModel> PeopleList
{
get { return (List<PeopleModel>)GetValue(PeopleListProperty); }
set { SetValue(PeopleListProperty, value); }
}
}
然後我的XAML:
<local:PeopleLine
x:Class="MyApp.Controls.EventSheet.OnePeople"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MyApp.Controls.EventSheet"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid
Margin="0 5"
VerticalAlignment="Top"
Height="51">
<TextBlock
Grid.Column="1"
HorizontalAlignment="Center"
Foreground="Red"
FontSize="25"
Text="{Binding PeopleList[0].Name}"/>
</Grid>
</local:PeopleLine>
而且我Page
包含有正確ItemsSource
(我已經選中它)和一個ItemsControl
這一切開始ItemTemplateSelector
(也完美工作)。下面是選擇使用的DataTemplate
之一:
<DataTemplate x:Key="OnePeople">
<peoplecontrols:OnePeople
PeopleList="{Binding LinePeopleList}"/>
</DataTemplate>
我使用的幾種模式,因爲我簡化了我的代碼,只有最重要的信息是不是真的很重要在這裏。
所以,回到我的問題。當用一個字符串替換選擇器的DataTemplate中的peoplecontrols:OnePeople
並將LinePeopleList[0].Name
作爲Text
時,我顯示了正確的文本,證明我的數據在此時是正確的。 問題是,當放回我的peoplecontrols:OnePeople
時,我的DependencyProperty
從未設置。我在PeopleList的setter中放置了一個斷點,它從不觸發。
我嘗試了幾個修改(特別是那些在這個post中給出的,因此替換typeof(List<PeopleModel>)
typeof(object)
已經嘗試過),但沒有成功。此外,我試圖取代我DependencyProperty
到string
並直接在DataTemplate
但二傳手仍不能稱爲發送名稱...
我沒有更多的想法,現在,不明白這有什麼錯我的代碼。任何幫助將不勝感激。 在此先感謝。
托馬斯
人這個解決方案是非常優雅!我發現了另一個正在做同樣的事情,我命名我的UserControl(例如'x:Name =「Parent」''),然後在我的根視圖中設置DataContext,如下所示:'DataContext =「{綁定ElementName =父}「'。感謝您的回答,雖然:) –