2016-04-29 6 views
-1

У меня есть ListView с Gridview и для ряда столбцов мне нужно иметь две строки данных. верхний одиночный имеет количество предметов и дно с этой суммой, умноженной на количество. Я могу получить максимальную сумму, чтобы показать ее просто отлично, но нижняя сумма не отображается. У меня есть разрывы в концевых частях, чтобы убедиться, что правильная сумма вытягивается, и она возвращает правильный номер, но не появляется, когда я запускаю программу.MultiBinding текстового блока в StackPanel в GridViewColumn.CellTemplate и текст не отображается

<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> 

Вот обратно CS Файл

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; } 
} 

} 

А вот XML файл с некоторыми данными

<?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> 

Спасибо заранее и дайте мне знать, если вам нужно больше информации, чтобы помочь мне.

+1

Это не хороший пример кода. Пожалуйста, предоставьте хороший [mcve], который надежно воспроизводит проблему, и точное описание того, что делает код, и что вы хотите, чтобы он делал. Сократите свой код до минимального необходимого для воспроизведения проблемы (например, больше столбцов и свойств, чем минимум, чтобы показать проблему), и предоставите пример кода _complete_, который может быть скомпилирован и запущен без каких-либо дополнительных усилий читателя , –

+0

Я согласен с Питером. Пожалуйста, предоставьте хороший пример кода, чтобы другие могли легко понять вашу проблему. Пожалуйста, не публикуйте здесь весь код, который может смутить других. – ViVi

+0

Хорошо, @PeterDuniho, я уменьшил столбцы до одного с проблемой (sub Amt), количеством (Q) и идентификатором (Sub Name). Проблема в том, что в сумме отображается только верхняя сумма, а нижняя часть просто пустая. Предполагается, что это сумма, умноженная на количество. – SSJTDK

ответ

0

Хорошо, я понял. Я имел

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

и это должно было быть

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