【问题标题】:WPF ListView binding with custom type & Insert controls带有自定义类型和插入控件的 WPF ListView 绑定
【发布时间】:2014-10-26 21:25:06
【问题描述】:

我正在制作聊天程序,并且我已经制作了 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

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

感谢您的回答。

【问题讨论】:

  • 太难了吗?...不,这是相当标准的。 我想自动更改这个 ListView...是的,我们都希望我们的代码自己编写,但它不会,所以你必须这样做。到目前为止,您尝试过什么?
  • @Sheridan 嗯.. 我尝试了很多解决方案。例如 GridView .. 但我无法获得良好的输出。现在我是移动的。明天我会上传代码。

标签: c# wpf listview binding


【解决方案1】:

如果我没有误解你的问题,试试这个

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}
        };
    }
}

输出

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多