2016-02-09 72 views
0

我爲Windows通用應用程序創建了一個UserControl。Windows通用用戶控件綁定

我在後面叫HourList這樣定義的文件我的代碼的屬性...

internal ObservableCollection<int> HourList = 
    new ObservableCollection<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
          12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; 

我想用HourList給我的用戶的XAML中的控件綁定到,例如...

<ListView Width="100" ItemsSource="{Binding HourList, ElementName=timePicker}" 
</ListView> 

這是假設我有一個名爲我的用戶是這樣的...

<UserControl x:Name="timePicker" 

w ^但是,如果我將控件放在頁面上,那麼我的列表視圖不會包含我期望的小時數列表。

有什麼我錯過了?

+0

你需要設置的datacontext的'ELEM entName'綁定沒有任何意義IMO,但沒有更多的代碼很難說 – thumbmunkeys

+0

就像@thumbmunkeys提到的那樣,在你的UserControl上需要一些更多的信息。由於您的綁定方式,HourList需要在您的UserControl上使用屬性或依賴屬性。如果您打算綁定到UserControl的datacontext上的HourList,請使用DataContext.HourList作爲綁定。此外,讓你的收藏公開,以便可以通過控件看到。 –

回答

0

您可以簡單地創建在用戶控件的代碼隱藏屬性:

public ObservableCollection<int> HourList 
{ 
    get; 
    set; 
} 
public UserControl() 
{ 
    this.InitializeComponent(); 
    HourList = new ObservableCollection<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
    10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 };     
} 

但是在某些時候,如果你需要綁定到它或做動畫,那麼你會需要它是一個依賴屬性象下面這樣:

public static readonly DependencyProperty HourListProperty = 
    DependencyProperty.Register("HourList", 
    typeof(ObservableCollection<int>), typeof(MyUserControl1), 
    new PropertyMetadata(new ObservableCollection<int> 
    { 
     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
     14, 15, 16, 17, 18, 19, 20, 21, 22, 23 
    })); 

public ObservableCollection<int> HourList 
{ 
    get 
    { 
     return (ObservableCollection<int>)this.GetValue(HourListProperty); 
    } 

    set 
    { 
     this.SetValue(HourListProperty, value); 
    } 
} 

無論哪種方式的XAML是一樣的:

<StackPanel> 
    <UserControl x:Name="timePicker" /> 
     <ListView   
     Height="100" 
     Foreground="Black"    
     Width="100" 
     ItemsSource="{Binding ElementName=timePicker, Path=HourList}"> 
     </ListView> 
</StackPanel>