2013-04-17 55 views
0

我正在編寫一個WPF程序在.NET 4.5上編寫一個程序,該程序將在裏面保存很多設置,並且我面臨着幾個問題。在運行時更改綁定並保存類實例WPF

例如,我有一個攝像頭,我需要在運行時創建攝像頭設置的另一個實例。對於XAML頁面,我有很多綁定,現在對於第二個實例,我需要清除它們對於該類的新實例的一個使用綁定,其中我擁有該設置的屬性(當然,如果我正確思考)所以,我有2個問題:

  1. 如何更改我的綁定,這樣我可以寫的代碼可能的最低金額(請記住,我不知道有多少實例將被創建)?

  2. 如何創建類的第二個,第三個等實例並在內存中丟失對象,因爲我需要在運行時保存每個類的每個實例,並在這些實例之間切換時更改綁定。

+0

發佈您當前的代碼和XAML。 –

回答

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> 
+0

感謝您的回答,但我只是更改頁面的datacontext並使用List <>來處理實例。 – Denis