WPF ListView绑定与自定义类型&插入控件

时间:2014-09-02 14:52:05

标签: c# wpf listview binding

我正在制作聊天程序,我已经建立了连接服务器的API。

这是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

太难了吗?但我认为这是可能的。

感谢您的回答。

1 个答案:

答案 0 :(得分: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();
    }
}
  

视图模型

    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