【问题标题】:WPF Combo Box Binding / ObservableCollection ObjectsWPF 组合框绑定/ObservableCollection 对象
【发布时间】:2018-09-03 19:37:42
【问题描述】:

组合框绑定有问题;

我有一个像这样的 Observable Collection;

这是我的组合框的样子:

<ComboBox ItemsSource="{Binding settingsViewModel.sFTPs}"
      DisplayMemberPath="Folder"
      SelectedValuePath="Folder"
      SelectedValue="{Binding settingsViewModel.sFTPs[0].Folder}"
      Grid.Column="0" Grid.Row="4"
      md:HintAssist.IsFloating="True"
      md:HintAssist.Hint="Save Directory"
      md:HintAssist.FloatingScale="1.5"
      Margin="5"
      />

它可以很好地返回项目列表,但是当我尝试保存它时会这样做;

[SFTP Connection]
Host=
Port=
UserName=
Password=
Type=SFTP
SavePath=Folder1

这是我的保存方法:

private void ExecuteSaveCommand(object param)
{

    IniFile iniFile = new IniFile();

    iniFile.Load(@"Configuration.ini");

    foreach (var itemCollection in sFTPs)
    {
        iniFile.Sections[0].Keys[0].Value = itemCollection.Address;
        iniFile.Sections[0].Keys[1].Value = itemCollection.Port;
        iniFile.Sections[0].Keys[2].Value = itemCollection.UserName;
        iniFile.Sections[0].Keys[3].Value = itemCollection.Password;
        iniFile.Sections[0].Keys[4].Value = "SFTP";
        iniFile.Sections[0].Keys[5].Value = itemCollection.Folder;
    }
    iniFile.Save(@"Configuration.ini");
}

【问题讨论】:

  • {Binding settingsViewModel.sFTPs} 要求 ComboBox 的当前 DataContext 中有一个公共的 settingsViewModel 属性。
  • 确实有一个公共的 SettingsViewModel,只要我点击保存,它就会获取最后一个 ObservableCollection 对象并保存它,无论我选择什么组合框项目。
  • 还有人有什么想法吗?
  • 您是否有意将 SelectedValue 绑定到 sFTP 中第一个对象的 Folder 属性?

标签: c# wpf combobox binding observablecollection


【解决方案1】:

创建节的代码不是追加新元素,而是使用当前元素一遍又一遍地覆盖同一节。这会导致只保存最后一个元素。

foreach (var itemCollection in sFTPs)
{
    // iniFile.Sections[0] <-- always overrides the same section
    iniFile.Sections[0].Keys[0].Value = itemCollection.Address;
    iniFile.Sections[0].Keys[1].Value = itemCollection.Port;
    iniFile.Sections[0].Keys[2].Value = itemCollection.UserName;
    iniFile.Sections[0].Keys[3].Value = itemCollection.Password;
    iniFile.Sections[0].Keys[4].Value = "SFTP";
    iniFile.Sections[0].Keys[5].Value = itemCollection.Folder;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多