Trong ứng dụng WPF có một Grid
với một số đối tượng (chúng được bắt nguồn từ một điều khiển tùy chỉnh). Tôi muốn thực hiện một số hành động trên mỗi người trong số họ sử dụng menu ngữ cảnh:Làm cách nào để tham chiếu đối tượng được nhấp chuột phải trong trình đơn Xử lý sự kiện nhấn vào Trình đơn ngữ cảnh WPF?
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" Click="EditStatusCm_Click"/>
</ContextMenu>
</Grid.ContextMenu>
Nhưng trong xử lý sự kiện tôi không thể nhận biết được của các đối tượng đã phải nhấp:
private void EditStatusCm_Click(object sender, RoutedEventArgs e)
{
MyCustControl SCurrent = new MyCustControl();
MenuItem menu = sender as MenuItem;
SCurrent = menu.DataContext as MyCustControl; // here I get a run-time error
SCurrent.Status = MyCustControl.Status.Sixth;
}
On rằng dòng nhận xét Trình gỡ lỗi cho biết: Tham chiếu đối tượng không được đặt thành phiên bản của đối tượng.
Xin vui lòng giúp đỡ, có gì sai trong mã của tôi?
Edited (thêm):
Tôi cố gắng để làm như vậy, sử dụng lệnh cách tiếp cận:
tôi tuyên bố một Class DataCommands
với RoutedUICommand Requery
và sau đó sử dụng Window.CommandBindings
<Window.CommandBindings>
<CommandBinding Command="MyNamespace:DataCommands.Requery" Executed="RequeryCommand_Executed"></CommandBinding>
</Window.CommandBindings>
XAML của MenuItem bây giờ trông giống như:
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" Command="MyNamespace:DataCommands.Requery"/>
</ContextMenu>
</Grid.ContextMenu>
Và xử lý sự kiện trông giống như:
private void RequeryCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
IInputElement parent = (IInputElement)LogicalTreeHelper.GetParent((DependencyObject)sender);
MyCustControl SCurrent = new MyCustControl();
SCurrent = (MuCustControl)parent;
string str = SCurrent.Name.ToString();// here I get the same error
MessageBox.Show(str);
}
Nhưng debugger cho thấy cùng một lỗi thời gian chạy: tham khảo Object không được đặt để một thể hiện của một đối tượng.
Điều gì còn thiếu trong cả hai cách tiếp cận của tôi?
Tôi nên tham khảo đối tượng được nhấp chuột phải trong trình đơn xử lý sự kiện theo ngữ cảnh WPF như thế nào?
tôi đã cố gắng sử dụng cách tiếp cận lệnh như nhiều WPF-ish, nhưng có những lỗi tương tự. Tôi đã chỉnh sửa câu hỏi của mình và thêm các bước trong nỗ lực tiếp cận Command của tôi. Sự hiểu biết của tôi về làm thế nào để có được tham chiếu đối tượng nhấp là thiếu một cái gì đó trong cả hai trường hợp – rem