我正在编写一个WPF程序在.NET 4.5上编写一个程序,它将在内部进行大量设置,并且我遇到了几个问题。
例如,我有一台相机,我需要在运行时创建该相机设置的另一个实例。对于XAML页面,我有很多绑定,现在对于第二个实例,我需要清除它们对该类的新实例的使用绑定,其中我保存该设置的属性(如果我正确地思考,当然)所以,我有两个问题:
如何更改绑定以便我可以编写尽可能少的代码(请记住,我不知道将创建多少个实例)?
如何创建类的第二个,第三个等实例并丢失内存中的对象,因为我需要在运行时保存每个类的每个实例,只需在这些实例之间切换时更改绑定。
答案 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>