我正在制作聊天程序,并且我已经制作了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; }
}
这是一个 Rooms 属性
public Room[] Rooms { get; private set; }
现在是客户端,我有 ListView,它显示房间列表。
<ListView x:Name="listView_RoomList" Grid.Row="1" Grid.ColumnSpan="2">
</ListView>
我想像这样设计 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
。
是不是太难了?但我认为这是可能的。
感谢您的回答。
最佳答案
如果我没有误解你的问题,试试这个
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}
};
}
}
output
关于c# - WPF ListView 与自定义类型和插入控件的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626333/