2010-04-08 109 views
4

我有以下表格:C#WPF XAML綁定到數據表

公司{CompanyID,公司名稱}
新政{CompanyID,值}

而且我有一個列表框:

<ListBox Name="Deals" 
     Height="100" Width="420" Margin="0,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" 
     Visibility="Visible" IsSynchronizedWithCurrentItem="True" 
     ItemsSource="{Binding}" SelectionChanged="Deals_SelectionChanged"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding companyRowByBuyFromCompanyFK.CompanyName}" FontWeight="Bold" /> 
       <TextBlock Text=" -> TGS -> " /> 
       <TextBlock Text="{Binding BuyFrom}" FontWeight="Bold" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

正如你所看到的,我想顯示CompanyName而不是外鍵的ID。關係「companyRowByBuyFromCompanyFK」存在,就像在Deals_SelectionChanged中我可以訪問Deals行的companyRowByBuyFromCompanyFK屬性,我也可以訪問該行的CompanyName屬性。

是因爲XAML綁定使用[]索引器而無法工作的原因?而不是DataTable中CompanyRows的屬性?

目前即時得到的值,如

  • - > TGS - > 3
  • - > TGS - > 4

編輯綁定錯誤更新

System.Windows.Data Error: 39 : BindingExpression path error: 'companyRowByBuyFromCompanyFK' property not found on 'object' ''DataRowView' (HashCode=30295189)'. BindingExpression:Path=companyRowByBuyFromCompanyFK.CompanyName; DataItem='DataRowView' (HashCode=30295189); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

看起來像它沒有將DataRowView項目轉換爲SuppliersRo w

完成此操作的最佳方法是什麼?

  1. 製作一個轉換器,使用被引用爲自定義參數的錶轉換外鍵。

  2. 爲每個表創建表視圖?由於我有相當多的有外鍵的表,所以這會很長時間。

+1

如果添加一絲你的綁定: {綁定路徑= companyRowByBuyFromCompanyFK.CompanyName,診斷:PresentationTraceSources.TraceLevel =高} 當列表框結合看你的輸出窗口,它說什麼了?這可能會讓我們更深入地瞭解綁定中的失敗。 – 2010-04-14 16:34:08

+1

Omg謝謝你!我總是忘記輸出窗口! Wwhy不會顯示在錯誤窗口!我現在修復它:)謝謝你的提示! – 2010-04-14 22:48:08

回答

2

有人殺我....謝謝你的輸出窗口,我總是忘了有關指出! :(

我發現通過查看輸出窗口中的溶液,其是以下

System.Windows.Data Error: 39 : BindingExpression path error: 'companyRowByBuyFromCompanyFK' property not found on 'object' ''DataRowView

我想出的是,結合的DataTemplate被結合的DataTemplate的的SelectedItem其是DataRowView的,而不是實際強類型數據幸運的是,DataRowView類有一個指向DataRow(這是supplierRow)類的Row屬性,因此我可以像往常那樣綁定這些數據,Fix在跟蹤行中。

<TextBlock Text="{Binding companyRowByBuyFromCompanyFK.CompanyName}" FontWeight="Bold" /> 

此更改爲下面的工作,因爲我預料到。

<TextBlock Text="{Binding Row.companyRowByBuyFromCompanyFK.CompanyName}" FontWeight="Bold" /> 
1

如何具有分級的結合(即通過基準從父控制其他表),並設定的名稱中,其將行(從列表項的數據源)的DataTemplate中一個multibinding,一起在其他表中的字段內搜索ID?

<UserControl x:Class="local:MyUserControl"> 
    <ListBox ItemsSource="{Binding Items}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Label> 
        <Label.Content> 
         <MultiBinding Converter="{StaticResource myConverter}"> 
          <Binding Path="OtherId" /> 
          <Binding 
           RelativeSource="RelativeSource FindAncestor, 
            AncestorType={x:Type local:MyUserControl}}}" 
           Path="OtherTable" /> 
         </MultiBinding> 
        </Label.Content> 
       </Label> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</UserControl> 

在轉換器:

public object Convert(object[] values, Type targetType, object parameter, 
    System.Globalization.CultureInfo culture) 
{ 
    // TODO: Input type checks 

    // TODO: Castings, find key in other table, return relevant field 
    return (values[1] as IDictionary<String, String>)[values[0] as String]; 
} 
+1

聽起來很不錯,能否提供任何2個表格的簡單示例。 – 2010-04-13 08:04:33