2015-07-02 3 views
2

Я пытаюсь добавить данные в текстовое поле с помощью MVVM. Моя проблема заключается в том, что мои данные не добавляются. Вот мой код:Добавляемые данные C# в текстовом поле

Модель:

//This is where the Outgoing Ports are Tapped and the data is displayed to the serial Monitor. 
var rawPacket = e.Value as RawPacket;              // Data recived from the port after tapped 
StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < rawPacket.RawData.Length; i++) { 
    sb.Append(rawPacket.RawData[i].ToString("X2")); 
} 
this.serialData.LuminRecevied = sb.ToString() + Environment.NewLine; 

Вид модели:

public string LuminRecevied { 
    get { return luminRecevied; } 
    set { 
     if (this.luminRecevied == value) { 
      return; 
     } 
     this.luminRecevied = value ; 
     this.InvokePropertyChanged("LuminRecevied"); 
    } 
} 

Binding XAML:

<TabItem Header="Luminaire" Name="tabItem3" HorizontalAlignment="Center"> 
      <TextBox TextWrapping="Wrap" FontFamily="Verdana" FontSize="13" Text="{Binding LuminRecevied,StringFormat=RX: {0}}" AcceptsReturn="True" TextChanged="TextBox_TextChanged_1" AcceptsTab="True" /> 
     </TabItem> 
+0

я могу видеть только LuminRecevied где ваша EnergyRecevied недвижимость –

+0

Извините! Я отправил неправильную часть кода. Я отредактировал его. его надлежащее сейчас. –

ответ

2

Кроме того, если вы хотите, чтобы добавить, то

this.serialData.LuminRecevied = sb.ToString() + Environment.NewLine; 

множества LuminRecevied равно

sb.ToString() + Environment.NewLine; 

Вы хотите сделать это вместо того, чтобы

this.serialData.LuminRecevied += sb.ToString() + Environment.NewLine; 

Отметьте (+ =)

+0

Привет, все еще не в состоянии добавить данные. –

+0

Привет, когда вы говорите, добавляя данные, мне просто интересно, можете ли вы вообще что-нибудь показать? То есть когда вы вызываете sb.ToString(), заполняется ли текстовое поле его значением? –

+0

Да, это так. Спасибо за ответ. мне удалось заставить его работать –

1
Change your code like this and try 

<TabItem Header="Energy-Meter" Name="tabItem4"> 
    <TextBox TextWrapping="Wrap" FontFamily="Verdana" FontSize="13" 
    Text="{Binding LuminRecevied ,StringFormat=RX: {0}}" AcceptsReturn="True" 
    TextChanged="TextBox_TextChanged_1" AcceptsTab="True" /> 
</TabItem> 
+0

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

1

Изменение свойства на LuminRecevied в привязке для элемента Text должно быть достаточно. Простой макете достаточно, чтобы доказать это:

public class ViewModel : INotifyPropertyChanged { 
private string luminRecevied; 

public string LuminRecevied 
{ 
    get { return luminRecevied; } 
    set 
    { 
     if (this.luminRecevied == value) 
     { 
      return; 
     } 
     this.luminRecevied = value; 
     this.InvokePropertyChanged("LuminRecevied"); 
    } 
} 

private void InvokePropertyChanged(string propName) 
{ 
    var propertyChanged = PropertyChanged; 

    if (propertyChanged != null) 
     this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propName)); 
} 


public event PropertyChangedEventHandler PropertyChanged; 
} 

XAML:

<Window x:Class="WpfApplication1.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"> 
<Grid> 
    <TabControl Height="311" HorizontalAlignment="Left" Name="tabControl1" VerticalAlignment="Top" Width="503"> 
     <TabItem Header="Energy-Meter" Name="tabItem4"> 
      <TextBox TextWrapping="Wrap" FontFamily="Verdana" FontSize="13" Text="{Binding LuminRecevied,StringFormat=RX: {0}}" AcceptsReturn="True" AcceptsTab="True" /> 
     </TabItem> 
    </TabControl> 
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="93,0,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" /> 
</Grid> 
</Window> 

код за Подвод:

public partial class MainWindow : Window { 
    private ViewModel viewModel = new ViewModel(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     this.DataContext = viewModel; 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     this.viewModel.LuminRecevied += "h"; 
    } 
} 
1
this.serialData.LuminRecevied += String.Concat(
    rawPacket.RawData.Select(i => i.ToString("X2")) + Environment.NewLine; 
Смежные вопросы