dotMemory
次のようなディクショナリにバインドするときにメモリ リークがあることを教えてくれます (以下のスクリーンショット、「WPF バインディング リーク」)。
<ComboBox ItemsSource="{Binding Items, Mode=OneTime}"
DisplayMemberPath="Value"
SelectedValue="{Binding SelectedItem}"
SelectedValuePath="Key" />
質問 1、皆様へ: なぜメモリ リークなのか (つまり、問題が発生した場合はどのシナリオを使用すればよいのか)、どのように修正すればよいのでしょうか?
質問 2、dotMemory の専門家へ: 基本的な mvvm アプリケーション (以下を参照) にこれほど多くの問題が報告されているのはなぜですか? それらの問題を修正する必要がありますか? どのように?
MCVE (新しい WPF ソリューションを作成し、xaml で上記のコードを使用) コード ビハインド:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
}
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string property = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
public Dictionary<string, string> Items { get; } = new Dictionary<string, string>
{
{ "1", "One" },
{ "1a", "One and a" },
{ "2a", "Two and a" },
};
string _selectedItem = "1a";
public string SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
OnPropertyChanged();
}
}
}