在运行时更改绑定并保存类实例WPF

时间:2013-04-17 18:07:11

标签: wpf xaml

我正在编写一个WPF程序在.NET 4.5上编写一个程序,它将在内部进行大量设置,并且我遇到了几个问题。

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

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

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

1 个答案:

答案 0 :(得分: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>