2014-09-02 2 views
2

Я создаю чат-программу, и я уже сделал API для подключения сервера.WPF ListView привязка с настраиваемым типом & Вставьте элементы управления

И это основной класс для API

public partial class PengChat3ClientSock : IDisposable 

Ну, PengChat3ClientSock имеет Rooms свойство.

public class Room 
{ 
    public uint ID { get; private set; } 

    public string Name { get; private set; } 

    public string Master { get; internal set; } 

    public short MaxConnectorNum { get; private set; } 

    public bool IsNeedPassword { get; private set; } 
} 

И это свойство Номера

public Room[] Rooms { get; private set; } 

Теперь клиент, у меня есть ListView, который показывает список номеров.

<ListView x:Name="listView_RoomList" Grid.Row="1" Grid.ColumnSpan="2"> 
</ListView> 

И я хочу спроектировать список как это.

RoomName Master MaxConnectorNum Password(If IsNeedPassword is true = Enable) EntryButton DeleteButton(If Master is I = Enable) 
Label Label Label   PasswordBox         Button  Button 
Label Label Label   PasswordBox         Button  Button 
Label Label Label   PasswordBox         Button  Button 
Label Label Label   PasswordBox         Button  Button 

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

И если свойство Rooms изменено, я хочу изменить это ListView автоматически.

Это слишком сложно? но я думаю, что это возможно.

Спасибо за ответы.

+0

* Является ли это слишком сложно? * ... нет, это довольно стандартный , * Я хочу изменить этот ListView автоматически * ... да, мы все хотим, чтобы наш код записывался сам, но это не так, вам придется это делать. что ты уже испробовал? – Sheridan

+0

@Sheridan хм .. я пробовал так много решений. таких как GridView .. но я не мог получить хороший результат. Теперь я мобилен. завтра я загружу код. – Lee

ответ

2

Если бы я не понял ваш вопрос, попробуйте этот

Room.cs

public class Room 
{ 
    public uint ID { get; set; } 

    public string Name { get; set; } 

    public string Master { get; set; } 

    public short MaxConnectorNum { get; set; } 

    public bool IsNeedPassword { get; set; } 
} 

XAML

<Window.Resources> 
    <Style TargetType="{x:Type Button}" x:Key="deleteButtonStyle"> 
     <Setter Property="IsEnabled" Value="False"></Setter> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Master}" Value="I"> 
       <DataTrigger.Setters> 
        <Setter Property="IsEnabled" Value="True"></Setter> 
       </DataTrigger.Setters> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 
<StackPanel> 
    <ListView ItemsSource="{Binding Rooms}"> 
     <ListView.View> 
      <GridView> 
       <GridView.Columns> 
        <GridViewColumn Header="RoomName"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Label Content="Label"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Master"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Label Content="Label"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="MaxConnectorNum"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Label Content="Label"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Password"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <PasswordBox IsEnabled="{Binding IsNeedPassword }" MinWidth="100"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="EntryButton"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Button Content="Button"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="DeleteButton"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Button Content="Button" Style="{StaticResource deleteButtonStyle}"> 
           </Button> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</StackPanel> 

xaml.cs

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext=new ViewModel(); 
    } 
} 

ViewModel

public class ViewModel 
{ 
    public ObservableCollection<Room> Rooms { get; set; } 

    public ViewModel() 
    { 
     Rooms = new ObservableCollection<Room>() 
     { 
      new Room(){Master="I",IsNeedPassword=false}, 
      new Room(){Master="I",IsNeedPassword=true}, 
      new Room(){Master="j",IsNeedPassword=false}, 
      new Room(){Master="k",IsNeedPassword=true} 
     }; 
    } 
} 

выходные enter image description here

+2

Вау ... большое спасибо. И я думаю, что мне нужно больше учиться. :) – Lee