2016-06-28 24 views
0

我试图将列表绑定到ListBox,但完全没有任何反应。我没有得到任何错误,但我确定ListBox绑定到列表已填充,因为我有一个文本控件,显示信息显示集合中有三个项目。从后面的代码绑定列表到列表框

所以,问题是什么是需要绑定到一个列表框

<ListBox x:Name="lbSlaves" Width="300" Grid.Row="1" ItemsSource="{Binding Slaves}" > 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate>      
       <StackPanel Width="150" Height="30" Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding MachineName}"></TextBox> <!-- Ive also tried Path=MachineName -->     
      </DataTemplate> 
     </ListBox.ItemTemplate>    
    </ListBox> 

代码背后

public List<ZTClient> Slaves { get; set; } 
    private void SetUpSlaves() 
    { 


     var client1 = new ZTClient() 
     { 
      MachineName = "Machine One", 
      IpAdress = "34534512", 
      Status = "Ready" 
     }; 

     var client2 = new ZTClient() 
     { 
      MachineName = "Machine Two", 
      IpAdress = "123456", 
      Status = "Ready" 
     }; 

     var client3 = new ZTClient() 
     { 
      MachineName = "Machine Three", 
      IpAdress = "65464234", 
      Status = "Ready" 
     }; 

     AddClient(client1); 
     AddClient(client2); 
     AddClient(client3); 

    //Ive also tried the following 
    //lbSlaves.DataContext = Slaves; 
     tbInfoBox.Text += "Nr of slaves = " + Slaves.Count() + Slaves[0].MachineName; 

    } 

    void SetInfoTex(string newText) 
    { 
     tbInfoBox.Text = newText; 
    } 

    private void AddClient(ZTClient newClient) 
    { 
     Slaves.Add(newClient); 

    } 
+0

检查输出窗口是否有绑定错误。 –

+0

使用ObservableCellection绑定列表,如果你稍后改变它们 –

回答

0

您绑定,默认情况下结合TwoWay属性(TextBox.Text)。你的MachineName是否有公共二传手?如果不将绑定模式更改为OneWay,或者更确切地说,可以使setter更易于访问,以防止绑定错误。

您还手动更新了您的信息文本,但您的ListBox绑定不受更改通知支持,因此它们可能不会同步。你应该绑定到ObservableCollection<ZTClient>,如果你想自己改变实例,那么ZTClient类应该实现INotifyPropertyChanged

+0

我还没有尝试过你的解决方案但是,想要感谢你指出了我不知道的一些方面。我将阅读关于可观察的收集和不同的绑定模式以及他们需要的内容。谢谢! – Lautaro