2016-04-29 10 views
-1

Ich habe eine ListView mit mit einem Gridview und für eine Anzahl der Spalten muss ich zwei Zeilen von Daten haben. die oberste Person hat die Artikelmenge und die Unterseite mit dieser Menge multipliziert mit der Menge. Ich kann den Höchstbetrag gut angezeigt bekommen, aber der untere Betrag wird nicht angezeigt. Ich habe Place Breaks in den Back-End-Teile, um sicherzustellen, dass die richtige Menge gezogen wird und es die richtige Zahl zurückgibt, aber es wird nicht angezeigt, wenn ich das Programm ausführen.MultiBinding ein TextBlock in einem StackPanel in einer GridViewColumn.CellTemplate und der Text zeigt nicht

<Window x:Class="Listviewissue.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" 
    xmlns:local="clr-namespace:Listviewissue"> 
<Window.Resources> 
    <local:AmountQuantityConverter x:Key="AmtQConverter"/> 

</Window.Resources> 
<Grid > 
    <ListView Name="lstBids" Margin="3" Grid.ColumnSpan="4" Grid.Row="1" MinHeight="200"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header ="Q"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Margin="1" Text="{Binding Path=Quantity}"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header ="Sub Name" Width="100"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Margin="1" Text="{Binding Path=SubContractorName}"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header ="Sub Amt"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <TextBlock Margin="1" Text="{Binding Path=SubContractorAmount, StringFormat={}{0:C}}"/> 
           <TextBlock Margin="1"> 
            <TextBlock.Text> 
             <MultiBinding Converter="{StaticResource AmtQConverter}" StringFormat="{}{0:C}}"> 
              <Binding Path="Quantity" /> 
              <Binding Path="SubContractorAmount"/> 
             </MultiBinding> 
            </TextBlock.Text> 
           </TextBlock> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 

Hier sind die Rückseite cs Datei

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using System.IO; 

namespace Listviewissue 
{ 
/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     LoadBox(); 
    } 

    private void LoadBox() 
    { 
     BidSheet bs = new BidSheet(); 
     bs.ReadFromDatabase("Test"); 
     lstBids.ItemsSource = bs.BidSheetLineItems; 
    } 
} 

public class AmountQuantityConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     // Return the total value of all the items in stock. 
     decimal quantity = decimal.Parse(values[0].ToString()); 
     decimal amt = decimal.Parse(values[1].ToString()); 
     decimal result = (quantity * amt); 
     return result; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 



public class BidSheet 
{ 
    public BidSheet() 
    { 
     BidSheetLineItems = new BidSheetLineItems(); 
    } 
    public BidSheetLineItems BidSheetLineItems { get; set; } 

    public void ReadFromDatabase(string file) 
    { 
     BidSheet bidSheet = new BidSheet(); 
     System.Xml.Serialization.XmlSerializer reader = 
     new System.Xml.Serialization.XmlSerializer(typeof(BidSheet)); 
     System.IO.StreamReader xmlFile = new System.IO.StreamReader(
      file + ".xml", true); 
     bidSheet = (BidSheet)reader.Deserialize(xmlFile); 

     BidSheetLineItems = bidSheet.BidSheetLineItems; 

     xmlFile.Close(); 
    } 
    } 


public class BidSheetLineItems : List<BidSheetLineItem> 
{ 


} 

public class BidSheetLineItem 
{ 
    public BidSheetLineItem() 
    { 
     Quantity = 0; 
     SubContractorName = ""; 
     SubContractorAmount = 0; 
    } 
    public double Quantity { get; set; } 
    public string SubContractorName { get; set; } 
    public decimal SubContractorAmount { get; set; } 
} 

} 

Und hier ist eine XML-Datei mit einigen Daten

<?xml version="1.0" encoding="utf-8"?> 
<BidSheet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<BidSheetLineItems> 
    <BidSheetLineItem> 
     <Quantity>1</Quantity> 
     <SubContractorName>Harry</SubContractorName> 
    <SubContractorAmount>50</SubContractorAmount> 
</BidSheetLineItem> 
<BidSheetLineItem> 
    <Quantity>5</Quantity> 
    <SubContractorName>Arther</SubContractorName> 
    <SubContractorAmount>248120</SubContractorAmount> 
</BidSheetLineItem> 
<BidSheetLineItem> 
    <Quantity>2</Quantity> 
    <SubContractorName>Bill</SubContractorName> 
    <SubContractorAmount>340000</SubContractorAmount> 
</BidSheetLineItem> 
<BidSheetLineItem> 
    <Quantity>3</Quantity> 
    <SubContractorName>Fred</SubContractorName> 
    <SubContractorAmount>248120</SubContractorAmount> 
</BidSheetLineItem> 
<BidSheetLineItem> 
    <Quantity>5</Quantity> 
    <SubContractorName>Ron</SubContractorName> 
    <SubContractorAmount>248120</SubContractorAmount> 
</BidSheetLineItem> 
<BidSheetLineItem> 
    <Quantity>1</Quantity> 
    <SubContractorName>Goerge</SubContractorName> 
    <SubContractorAmount>60</SubContractorAmount> 
</BidSheetLineItem> 
    </BidSheetLineItems> 
</BidSheet> 

Vielen Dank im Voraus und lassen Sie mich wissen, wenn Sie brauchen noch mehr Infos, um mir zu helfen.

+1

Dies ist kein gutes Codebeispiel zu sein. Bitte stellen Sie eine gute [mcve] zur Verfügung, die das Problem zuverlässig reproduziert, und eine genaue Beschreibung dessen, was der Code tut und was er stattdessen tun soll. Reduzieren Sie Ihren Code auf das Notwendige, um das Problem zu reproduzieren (z. B. keine Spalten und Eigenschaften mehr als das Minimum, um das Problem zu zeigen) und stellen Sie ein _complete_ Codebeispiel bereit, das kompiliert und ohne zusätzlichen Aufwand vom Leser ausgeführt werden kann . –

+0

Ich stimme Peter zu. Geben Sie ein gutes Codebeispiel an, damit andere Ihr Problem leicht verstehen können. Bitte poste hier nicht den gesamten Code, der andere verwirren könnte. – ViVi

+0

Okay, @PeterDuniho, Ich habe die Spalten auf nur eins reduziert mit dem Problem (Sub-Amt), der Menge (Q) und einem Bezeichner (Sub Name). Das Problem ist, dass der Unterbetrag nur den Höchstbetrag anzeigt und der Unterteil nur leer ist. Es soll die Menge multipliziert mit der Menge sein. – SSJTDK

Antwort

0

Okay, ich habe es herausgefunden. Ich hatte

<MultiBinding Converter="{StaticResource AmtQConverter}" StringFormat="{}{0:C}}"> 

und es benötigte

<MultiBinding Converter="{StaticResource AmtQConverter}" StringFormat="{}{0:C}">