0

我正在编写一个 WPF 程序 在 .NET 4.5 上编写一个程序,该程序将在内部保存很多设置,我面临着几个问题。

例如,我有一个相机,我需要在运行时创建该相机设置的另一个实例。对于 XAML 页面,我有很多绑定,现在对于第二个实例,我需要为该类的新实例清除它们的使用绑定,在该类的新实例中我持有该设置的属性(当然,如果我想正确的话)所以,我有2个问题:

  1. 如何更改绑定,以便编写尽可能少的代码(请记住,我不知道将创建多少个实例)?

  2. 我如何创建类的第二个、第三个等实例并丢失内存中的对象,因为我需要在运行时保存每个类的每个实例,并在这些实例之间切换时更改绑定。

4

1 回答 1

0

创建一个为您管理和公开设置的视图模型。使用附加属性来提供当前选择的设置:

public class CameraSettings
{
  public string Title { get; set; }
  public bool Grayscale { get; set; }
}

public class CameraViewModel : INotifyPropertyChanged
{
  private CameraSettings _SelectedSettings;
  private List<CameraSettings> _Settings;

  public event PropertyChangedEventHandler PropertyChanged;

  public IEnumerable<CameraSettings> Settings
  {
    get { return _Settings; }
  }

  public CameraSettings SelectedSettings
  {
    get { return _SelectedSettings; }
    set
    {
      if (_SelectedSettings != value)
      {
        _SelectedSettings = value;

        if (PropertyChanged != null)
        {
          PropertyChanged(this, new PropertyChangedEventArgs("SelectedSettings"));
        }
      }
    }
  }

  public CameraViewModel()
  {
    _Settings = new List<CameraSettings>()
    {
      { new CameraSettings() { Title = "BlackWhite", Grayscale = true } },
      { new CameraSettings() { Title = "TrueColor", Grayscale = false } }
    };
  }

}

然后你可以将你的视图绑定到这个视图模型。示例视图:

<Window.DataContext>
    <local:CameraViewModel />
</Window.DataContext>

<StackPanel>

    <ComboBox ItemsSource="{Binding Settings}" SelectedItem="{Binding SelectedSettings, Mode=TwoWay}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <Label Content="{Binding Title}" />
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

    <TextBlock Text="{Binding SelectedSettings.Grayscale}" />

</StackPanel>
于 2013-04-17T18:30:12.100 回答