0

監視可能なコレクションの更新に関して質問があります。Visual Studio 2010 c# を使用しています。私は比較的初心者であり、壊滅的なエラーを犯した可能性があるため、開始することをお詫びします. 基本的に、このコードは Windows 7 で実行すると完全に機能しますが、Windows 8 ではNullReferenceExceptionon PropertyChanged を取得します。

Tasks オブザーバブル コレクションを保持するクラスがあります。

Tasks.cs

namespace TimeLocation
{
    public static class TStatic
    {
        static TStatic()
        {
            TaskList = new ObservableCollection<Tasks>(); 
        }
        public static ObservableCollection<Tasks> TaskList { set; get; }
    }


public class Tasks : INotifyPropertyChanged
{
    public int taskID;
    public string taskname;

    public Tasks(string tname)
    {

        this.taskname = tname;
    }



    public string Taskname
    {
        get { return taskname; }
        set
        {
            if (value != "")
            {
                taskname = value; OnPropertyChanged("Taskname");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string info)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(info));

        }
    }
}

MainWindow に Tasks にバインドされたグリッドがあり、更新するとPropertyChanged上記のように更新されます。ユーザーは、マウスでドラッグしてタスクを編集することもできます。これにより、グリッドと監視可能なコレクションも更新されます。Windows 7 で実行すると、これは機能しましたが、Windows 8 では失敗します。

mainwindow.xaml のコードビハインド

public partial class MainWindow : INotifyPropertyChanged
{

    public MainWindow()
    {

        InitializeComponent();

        DataContext = TStatic.TaskList;
    }

    private void dCanvas_PreviewMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        Tasks t = _selectedtask;
        t.taskname = "Test";
        PropertyChanged(t, new PropertyChangedEventArgs("Taskname"));
    }
}

ファイルに保存してウォッチを追加すると、名前が変更されたため、タスク名が更新されると確信しています。

_selectedtaskグリッド行の選択からのタスクで満たされています。

Windows 8では、行

PropertyChanged(t, new PropertyChangedEventArgs("Taskname"));

null エラーを返します。Windows 7 では null ではなく、グリッドを適切に更新します。

4

1 に答える 1