2016-08-23 36 views
-1

5つのTextBoxがあります。私は書き込み後にテキストボックスから合計数値を表示する必要があります。現在、合計ではなくテキストボックスから数値を表示しています。これは私のコードです:ViewModelにでWPFの合計値はテキストボックス

<StackPanel Orientation="Vertical" Margin="0 10 24 0" DockPanel.Dock="Right" HorizontalAlignment="Right"> 
     <TextBlock Text="Hc" HorizontalAlignment="Center"></TextBlock> 
     <ItemsControl ItemsSource="{Binding Path=List}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <TextBox Text="{Binding Path=Value, Mode=TwoWay}" PreviewTextInput="NumberValidationTextBox" Width="50"/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
     <Button Command="{Binding SaveCommand}" Style="{StaticResource SmallSuccessButton}" Margin="0 10 0 0" Content="Save"></Button> 
    </StackPanel> 

    <StackPanel Orientation="Vertical" Margin="0 10 5 0" DockPanel.Dock="Right" HorizontalAlignment="Right"> 
     <TextBlock Text="Sum" HorizontalAlignment="Center"></TextBlock> 
     <ItemsControl ItemsSource="{Binding Path=List}" HorizontalContentAlignment="Center"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Background="red"> 
         <TextBlock Text="{Binding Path=Value, Mode=OneWay}" Height="26" PreviewTextInput="NumberValidationTextBox" 
            Width="60" 
            HorizontalAlignment="Center" /> 
        </StackPanel> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </StackPanel> 

: 民間のObservableCollectionの_list;

public ObservableCollection<Data> List 
    { 
     get { return _list;} 
     set { _list = value; OnPropertyChanged(nameof(List)); } 
    } 



    public class MeasureInput 
    { 
     public float Value { get; set; } 

     public MeasureInput(float f) 
     { 

     } 
    } 

結果がでなければなりません:

SUMテキストボックス 10私は10と合計が、私は5と合計が15の

おかげ

+0

の後ろに、私は任意の合計を実行するコード、またはそれを格納するための値が表示されません。あなたの質問は何ですか? – Joe

+0

このコードは簡単です:List.Sum()、しかし、私はどこにそれを書くかわかりません。 – bluray

答えて

1

があなたのViewModelにこのコードを追加設定し、書き込み10 15を設定して書き込み:

public double Sum 
{ 
    get { return List.Sum();} 
} 

あなたのXAMLでは、バインド代わりに、リストの合計に:

<TextBlock Text="{Binding Sum}" /> 
+1

また、PropertyChangeListenersをデータに追加し、SumのNotifyPropertyChangedを上げる必要があるかもしれないことに注意する価値があります。そうしないと、テキストボックスが変更されたときに更新されません。 – Joe

1

アドオンが

<StackPanel TextBox.TextChanged="OnTextChanged"> 
.... 


</StackPanel> 

をStackPanelのために、コードに

public void OnTextChanged(routedEvent e,sender variable) 
{ 
int Sum = 0; 
    if(e.source is TextBox) 
    { 
     forearch(Child child in stackpanel.Children) 
     { 
       if(child is TextBox) 
       { 
        TextBox txt = child as TextBox; 
        if(txt.Text != "") //validation empty textbox 
        Sum+= int.Parse(txt.Text); 
       } 
     } 
    } 

} 
関連する問題