2014-01-17 65 views
0

我有一個ListBox,其中顯示所有訂單頭寸。我需要顯示一個價格。我創建了一個ValueConverter,它需要一個OrderPosition對象並將我的價格返回爲double。 公式:金額* Product.Price(AmountProductOrderPosition屬性)將當前項目傳遞給ValueConverter

我的XAML就不會顯示任何內容:

<ListBox Grid.Row="1" Grid.Column="0" Margin="3" ItemsSource="{Binding SelectedOrder.OrderPositions}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 
        <TextBlock Grid.Column="0"> 
         <TextBlock.Text> 
          <MultiBinding StringFormat="{}{0}x {1}"> 
           <Binding Path="Amount" /> 
           <Binding Path="Product.Label" /> 
          </MultiBinding> 
         </TextBlock.Text> 
        </TextBlock> 
        <TextBlock Text="{Binding /, Converter={StaticResource PositionPriceConverter}, StringFormat={}{0:c}}" Grid.Column="1" 
            TextAlignment="Right" /> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

這裏是我的轉換器:

public class PositionPriceConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var position = (OrderPosition)value; 
     return position.Amount * position.Product.Price; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

你能告訴你的轉換器嗎? – sexta13

+0

我已經添加了。我認爲這種投射是有效的,因爲我的應用程序不會拋出異常。 –

+0

我想@dkozl是最好的答案:) – sexta13

回答

3

目前設置Path=/它結合CollectionView.CurrentItem

當源是一家集來看,當前項目可以用斜線(/)指定。例如,子句Path = /設置綁定到視圖中的當前項目。當源是集合時,此語法指定默認集合視圖的當前項目。

可以實現通過設置Path=.或不設置Path完全後在做什麼。

<TextBlock Text="{Binding Path=., Converter=...} 

<TextBlock Text="{Binding Converter=...} 

但是要注意,它不會觸發更新時,要麼AmountProduct.Price會改變,所以也許MultiBindingIMultiValueConverter將是更好的選擇。

+0

謝謝你的作品。我試過{綁定路徑,轉換器...}但收到一個錯誤。沒有逗號它可以工作。 –

0
   <ListBox Grid.Row="1" 
        Grid.Column="0" 
        Margin="3" 
        ItemsSource="{Binding SelectedOrder.OrderPositions}"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="*" /> 
          </Grid.ColumnDefinitions> 
          <TextBlock Grid.Column="0"> 
           <TextBlock.Text> 
            <MultiBinding StringFormat="{}{0}x {1}"> 
             <Binding Path="Amount" /> 
             <Binding Path="Product.Label" /> 
            </MultiBinding> 
           </TextBlock.Text> 
          </TextBlock> 
          <TextBlock Grid.Column="1"> 
           <TextBlock.Text> 
            <MultiBinding Converter="{StaticResource PositionPriceConverter}" StringFormat="{}{0}x {1}"> 
             <Binding Path="Amount" /> 
             <Binding Path="Product.Label" /> 
            </MultiBinding> 
           </TextBlock.Text> 
          </TextBlock> 
         </Grid> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

像這樣改變轉換器,

public class PositionPriceConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     var amt = (double)values[0]; 
     var price = (double) values[1]; 
     return amt * price; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
0

我不確定您提供給綁定的路徑是否合法({Binding /, Converter....)。

試圖改變它在:

<TextBlock Text="{Binding Converter={StaticResource PositionPriceConverter}, StringFormat={}{0:c}}" Grid.Column="1" TextAlignment="Right" /> 

<TextBlock Text="{Binding Path=., Converter={StaticResource PositionPriceConverter}, StringFormat={}{0:c}}" Grid.Column="1" TextAlignment="Right" /> 
相關問題