2016-04-12 96 views
0

Yeni bir programcıyım. Ben de olabildiğince açıklamaya çalışacağım. WPF'de bir araç programlama yapıyorum. Aşağıdaki gibi bir kullanıcı denetimi yaptım. MainWindow içinde C# Listeden öğe listesine ekle UserControl

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="30"></ColumnDefinition> 
     <ColumnDefinition Width="150"></ColumnDefinition> 
     <ColumnDefinition></ColumnDefinition> 
     <ColumnDefinition Width="50"></ColumnDefinition> 
     <ColumnDefinition Width="30"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <Button x:Name="DelOutConBT" Margin="5" Content="X" Click=" Delete ConnSet"></Button> 
    <Label x:Name="OutConLB" Grid.Column="1" ></Label> 
    <ComboBox x:Name="InConComB" Grid.Column="2"></ComboBox> 
    <TextBox x:Name="ConnValueTX" Grid.Column="3" Margin="5"></TextBox> 
    <Button Grid.Column="4" Margin="5" Content=">>"></Button> 
</Grid> 

User control

, ben zaten bir liste ve bir sekmeyi programlanmış. Liste kutusu bir Python betiği çalıştıran bazı öğelerle doldurulacak.

Şimdi, kullanıcı listesinden bir öğe seçerek kullanıcı ana denetimi eklemek ve ana pencerede düğmesini tıklatmak için etkinleştirmek istiyorum.

Benim sorum eklendiğinde, usercontrol bilgilerini otomatik olarak nasıl yükleyebilir. Kullanıcı denetiminde etiketin liste kutusundan seçilen öğeyi göstermesini ve açılan kutunun Listbox'taki tüm öğeleri göstermesini istiyorum. Daha sonra, usercontrol içindeki ">>" düğmesine tıklayarak, usercontrol içindeki veriler bir sınıfa veya başka bir şeye kaydedilebilir. Çünkü usercontrols ile doldurulmuş tüm verileri başka bir Python betiğiyle kullanacağım.

Bu, kullanıcı denetimini ana pencereye eklemek için programladığım şeydir.

Mainwindow.xaml.cs

private void ConSel_Click(object sender, RoutedEventArgs e) 
{ 
    if (ListB.SelectedItem != null) 
    { 
     string name = ((ListBoxItem)ListB.SelectedItem).Name;     
     ConnSet CSobj = new ConnSet(); 
     StkConn.Children.Add(CSobj);     
    }       
} 
+0

Bunu bir ItemsControl'de bir TemplateSelector ile yapıyor olmalısınız. Bu şekilde nispeten kolay olurdu. –

cevap

0

Ne aradığınız bir liste görünümü için bir "stil" olduğunu düşünüyorum. Sorunuz çok açık değildir, bu yüzden sizin için tam olarak aradığınızı sana veremem, ama burada ne gerek yapacağını bağları kullanarak bir ListView bir örnek:

UI:

<ListBox ItemsSource="{Binding Items}" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="30"/> 
        <ColumnDefinition Width="150"/> 
        <ColumnDefinition/> 
        <ColumnDefinition Width="50"/> 
        <ColumnDefinition Width="30"/> 
       </Grid.ColumnDefinitions> 
       <Button x:Name="DelOutConBT" Margin="5" Content="X" Click=" Delete ConnSet"/> 
       <Label x:Name="OutConLB" Grid.Column="1" ></Label> 
       <ComboBox x:Name="InConComB" Grid.Column="2"></ComboBox> 
       <TextBox x:Name="ConnValueTX" Grid.Column="3" Margin="5"></TextBox> 
       <Button Grid.Column="4" Margin="5" Content=">>"></Button> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Kod Arkası:

public ObservableCollection<ConnSet> Items { get; set; } 

private void ConSel_Click(object sender, RoutedEventArgs e) 
{ 
    if (ListB.SelectedItem != null) 
    { 
     string name = ((ListBoxItem)ListB.SelectedItem).Name;     
     ConnSet CSobj = new ConnSet(); 
     Items.Add(CSobj); // with the correct bindings, this will push to the UI for you 
    }       
} 

Hızlı Düzenleme: xaml kodu o kadar yeni bir öğe eklendiğinde "tasarım için bu şablona uygun, her öğe için" diyor yani neler oluyor , o şablona bakar ve herşeyi sizin için bırakır.

WPF kullanıyorsanız MVVM veya MVC desenlerini aramanızı öneririz. Gördüğüm kadarıyla, WPF'nin kullanılması için tasarlandı. Konuyla ilgili kontrol edebileceğiniz çok sayıda iyi kitap var. Umarım bu yardımcı oldu!

+1

İlk olarak yardımlarınız için teşekkür ederiz. Daha açık bir şekilde açıklamaya çalışıyorum. Ben usercontrol liste kutusunda eklemek istemiyorum. Bir sekmede eklemek istiyorum. Liste kutusu ve ana penceredeki sekme zaten yapıldı. Sorunum, Kullanıcı Arabirimi'nin Combobox'ının liste kutusundan tüm öğeleri nasıl yükleyeceğidir ve Etiket, liste kutusundan seçilen öğeyi yükler. Umarım daha açıktır. >. < –

+0

Sanırım seni biraz daha iyi anlıyorum. Yapmak istediğin şey, ikinci sekmenin içine bir "StackPanel" yazması ve kontrolünü bunun içine koymasıdır. Ardından: ControlHost.Children.Add (CSobj); –

+0

Eğer bu soruya cevap verirse, lütfen bunu "cevaplandı" olarak işaretler misiniz ve ikinci yorumu cevabıma ekleyebilirim, böylece diğerleri çözümün avantajlarından yararlanabilirler? –