我正在嘗試使用 mvvm 制作一個帶有大量控制元件的螢屏 這是一個設定螢屏,我希望允許用戶搜索他想要的設定,而讓其他設定不可見。
我不想為每個控制元件創建一個屬性,而是想創建一個串列并將每個專案從它索引到一個控制元件。
但是,為了便于維護,我想使用自定義索引器,在這種情況下是一個字串
我創建了這個串列
public class ObservConfigList: ObservableCollection<ConfigModel>
{
public ConfigModel this[string find]
{
get => this.FirstOrDefault(x => x.Config == find);
set
{
var indice = this.IndexOf(this.FirstOrDefault(x => x.Config == find));
if (indice >= this.Count)
this[indice] = value;
}
}
}
xaml 是這樣的
<Grid DataContext="{Binding ListConfig[EMPRESA]}" Style="{StaticResource visibConvert}">
<Grid.ColumnDefinitions>
<ColumnDefinition Style="{StaticResource col1}"/>
<ColumnDefinition Style="{StaticResource col2}"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Descricao}"/>
<ComboBox Grid.Column="1" Text="{Binding Valor}">
<ComboBoxItem Content="SIM"/>
<ComboBoxItem Content="N?O"/>
</ComboBox>
</Grid>
我的視圖模型
private ObservConfigList _listConfig = new ObservConfigList();
public ObservConfigList ListConfig { get => _listConfig; set => _listConfig = value; }
private void ConfigViewModel()
{
ConfigEmpresa = new ConfigModel();
ConfigEmpresa.Descricao = "Empresa";
ConfigEmpresa.IsVisible = true;
ConfigEmpresa.Config = "EMPRESA";
ListConfig.Add(ConfigEmpresa);
}
它甚至在運行時按我的預期作業,但我不知道這是否是正確的方法,并且在 xaml 中,通知不斷顯示 EMPRESA 索引無效。

uj5u.com熱心網友回復:
我發現了這個問題
并修改了我串列中的代碼來這樣做
public class ObservConfigList
{
private ObservableCollection<ConfigModel> _listConfig = new ObservableCollection<ConfigModel>();
public ObservableCollection<ConfigModel> ListConfig { get => _listConfig; set => _listConfig = value; }
public ConfigModel this[string find]
{
get => ListConfig.FirstOrDefault(x => x.Config == find);
set
{
var indice = ListConfig.IndexOf(ListConfig.FirstOrDefault(x => x.Config == find));
if (indice >= ListConfig.Count)
ListConfig[indice] = value;
}
}
}
這樣它就不再顯示錯誤通知。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/354195.html
