【发布时间】:2021-11-17 08:36:11
【问题描述】:
也许这是一个糟糕的设计理念,但这是我的想法:
public class NetworkDrive : BaseNotify
{
private char letter;
public char Letter
{
get => letter;
set => SetAndNotify(ref letter, value, nameof(Letter));
}
private string name;
public string Name
{
get => name;
set => SetAndNotify(ref name, value, nameof(Letter));
}
private bool isLetterAvailable;
public bool IsLetterAvailable
{
get => isLetterAvailable;
set => SetAndNotify(ref isLetterAvailable, value, nameof(Letter));
}
}
public class EditDriveViewModel : Screen
{
public ObservableCollection<NetworkDrive> NetworkDrives { get; } = new();
}
NetworkDrives 填充了所有字母,当用户选择一个字母并为其命名时,该字母不再可用,因此 IsLetterAvailable 设置为 false。
我想在 datagridview 中列出它,但只列出正在使用的字母,即:IsLetterAvailable 设置为 false 的字母,但如果我将 ItemsSource 用于 NetworkDrives,它将列出所有内容。
如果我执行以下操作:
public ObservableCollection<NetworkDrive> UsedNetworkDrives
{
get => NetworkDrives.Where(x => !x.IsLetterAvailable).ToList();
}
然后我失去了通知以及能够将字母设置为真/假并反映它的能力。
在datagridview中我也有一个关于字母的组合框,以便用户可以更改它,所以我还需要管理它,以便使用的字母显示为红色,如果选中,用户将无法使用。
有没有办法解决这个问题?
【问题讨论】:
-
对不起,我不会说你的语言
-
对不起。我没有注意到我用英语以外的语言发帖。请明确:您使用的是 Forms.DadaGridView 还是 Controls.DataGrid (WPF)?如果是后者,您是如何将 DataGrid 绑定到您的 NetworkDrives 集合的?
-
我正在使用 Stylet,所以 MVVM,
{Binding NetworkDrives}并且我标记了它的 WPF 问题