2011-12-24 36 views
0

請幫助...我在這裏做錯了什麼?試圖將列表框綁定到數據表。調試完成後,我在表格中看到數據行,但看到它不與列表框綁定。試圖綁定數據表與列表框......錯誤的東西

僅供參考。 _this是我當前窗口的名稱...

  <ListBox Grid.Column="1" ItemsSource="{Binding ElementName=_this, Path=MainCategoriesTable}" HorizontalAlignment="Center" BorderBrush="Transparent" Background="Transparent" x:Name="lbMainCategories"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <RadioButton Grid.Column="0" Content="{Binding Path=main_category_name}" VerticalAlignment="Center" GroupName="grpMainCategory" x:Name="rdbEnableDisable" /> 
          <Label Grid.Column="1" Width="30" Background="Transparent" /> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

下面是財產試圖與綁定...

public DataTable MainCategoriesTable 
    { 
     get { return _dtMainCategory; } 
     set { _dtMainCategory = value; } 
    } 
+0

在哪裏控制命名爲「_this」?你不想綁定到DataContext中的某些東西嗎? – 2011-12-24 22:06:20

+0

我也嘗試過DataContext。它也沒有工作。 _this是我的當前窗口名稱等: <窗口x:類= 「WpfApplication1.Window3」 的xmlns = 「http://schemas.microsoft.com/winfx/2006/xaml/presentation」 的xmlns:X = 「http://schemas.microsoft.com/winfx/2006/xaml」 xmlns:local =「clr-namespace:WpfApplication1」 Title =「Window3」Height =「1000」Width =「1200」 x:Name = 「_this」> 說實話。幾天前我嘗試了這個確切的代碼,它工作。我不知道我所做的更改或更改了什麼,但現在它無法正常工作...... – usergaro 2011-12-24 23:35:21

回答

0

對於XAML來設置數據上下文tocode這背後是什麼在起作用我

DataContext="{Binding RelativeSource={RelativeSource Self}}" 

在後面的代碼

this.DataContext = this; 

但我用_this就像你用它成功了。

在所有XAML綁定中設置Presentation.Trace = High。這不是確切的語法,但如果您從Presentation開始,它應該很明顯。

爲什麼沒有綁定在標籤上。

main_category_name是一個公共屬性?我注意到它是小寫的。

+0

well main_category_name是DataTable中的列名稱。 – usergaro 2011-12-25 01:13:39

+0

如果單選按鈕可以工作,那麼我也會嘗試標籤。但我被卡在單選按鈕上。 – usergaro 2011-12-25 01:14:35

+0

可能是正確的使用DataContext。但我非常有信心,我不需要使用DataContext。所以,只是爲了讓你的想法一炮而紅,我嘗試了DataContext,它並沒有起作用。:( – usergaro 2011-12-25 01:34:24

0

DataTable像字典一樣工作,不像對象。它不會將您的列作爲屬性公開,但每個DataRow都會顯示一個可用於獲取單元格值的indexer。因此,你需要使用索引語法:

<RadioButton Grid.Column="0" Content="{Binding Path=[main_category_name]}" VerticalAlignment="Center" GroupName="grpMainCategory" x:Name="rdbEnableDisable" /> 

UPDATE

困擾我的是,你的MainCategoriesTable財產不會通知用戶更改另一件事。如果在所有Bindings初始化後都更改,它將不起作用(而DependencyProperty將會因爲它總是通知有關更改)。要使其工作,你的上下文類必須實現INotifyPropertyChanged接口和你的財產必須是這樣的:

public DataTable MainCategoriesTable 
{ 
    get { return _dtMainCategory; } 
    set 
    { 
     if(value == _dtMainCategory) 
     { 
     return; 
     } 

     _dtMainCategory = value; 
     var h = this.PropertyChanged; 
     if(h != null) 
     { 
     h(this, new PropertyChangedEventArgs("MainCategoriesTable")); 
     } 
    } 
}