I am new in WPF programming with MVVM pattern. Now I have added the context menu in the datagrid. But, when I click the right mouse button, I don't know how to get the select row value. this is my xmal
<DataGrid AutoGenerateColumns="False" Grid.Row="1" CanUserAddRows="False" CanUserDeleteRows="False"
ItemsSource="{Binding StoryList}">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}" Width="40" IsReadOnly="True" />
<DataGridTextColumn Header="Title" Binding="{Binding Title}" Width="60" IsReadOnly="True"/>
<DataGridTextColumn Header="StoryPoints" Binding="{Binding StoryPoints}" Width="90" IsReadOnly="True">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding StoryPoints}" Value="0">
<Setter Property="Background" Value="Red"/>
<Setter Property="ToolTip" Value="Story Point cannot be 0."/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Stack Rank" Binding="{Binding StackRank}" Width="80"/>
<DataGridTextColumn Header="Estimate" Binding="{Binding Estimate}" Width="60"/>
<DataGridTextColumn Header="CompletedWork" Binding="{Binding CompletedWork}" Width="120" />
<DataGridTextColumn Header="RemainWork" Binding="{Binding RemainWork}" Width="110" />
<DataGridTextColumn Header="CompleteProcess" Binding="{Binding CompletedProcess}" Width="110" />
<DataGridTextColumn Header="YesterdayComments" Binding="{Binding YesterdayComments}" Width="120" />
<DataGridTextColumn Header="TodayComments" Binding="{Binding TodayComments}" Width="120" />
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu Name="StoryMenu" StaysOpen="True">
<MenuItem Header="Add an Issue" Command="{Binding AddIssueCommand}" />
<MenuItem Header="Burn Down Chart" Command="{Binding BurnDownChartCommand}"/>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
And here is my viewModel
class MainViewModel:NotificationObject
{
private ObservableCollection<Story> storyList;
public ObservableCollection<Story> StoryList
{
get { return storyList; }
set
{
storyList = value;
this.RaisePropertyChanged("StoryList");
}
}
public DelegateCommand AddIssueCommand { get; set; }
public DelegateCommand BurnDownChartCommand { get; set; }
private Story selectStory;
public Story SelectStory
{
get { return selectStory; }
set
{
selectStory = value;
this.RaisePropertyChanged("SelectStory");
}
}
public void LoadStory()
{
this.storyList = new ObservableCollection<Story>();
Story story1 = new Story(){ID=1, Title="win App", StoryPoints=0, StackRank=1, Estimate=40, CompletedWork=10, RemainWork=30, CompletedProcess=25, TodayComments="Coding", YesterdayComments="N/a"};
Story story2 = new Story() { ID = 2, Title = "win App", StoryPoints = 10, Estimate = 40, CompletedWork = 10, RemainWork = 30, CompletedProcess = 25, TodayComments = "Coding 20%", YesterdayComments = "N/a" };
Story story3 = new Story() { ID = 3, Title = "win App", StoryPoints = 10, Estimate = 50, CompletedWork = 20, RemainWork = 30, CompletedProcess = 20, TodayComments = "Coding 30%", YesterdayComments = "N/a" };
Story story4 = new Story() { ID = 4, Title = "win App", StoryPoints = 10, Estimate = 60, CompletedWork = 30, RemainWork = 30, CompletedProcess = 50, TodayComments = "Coding 40%", YesterdayComments = "N/a" };
Story story5 = new Story() { ID = 5, Title = "win App", StoryPoints = 10, Estimate = 40, CompletedWork = 10, RemainWork = 30, CompletedProcess = 25, TodayComments = "Coding 50%", YesterdayComments = "N/a" };
Story story6 = new Story() { ID = 6, Title = "win App", StoryPoints = 10, Estimate = 30, CompletedWork = 30, RemainWork = 0, CompletedProcess = 100, TodayComments = "Coding 60%", YesterdayComments = "N/a" };
storyList.Add(story1);
storyList.Add(story3);
storyList.Add(story2);
storyList.Add(story4);
storyList.Add(story5);
storyList.Add(story6);
}
public MainViewModel()
{
this.SelectStory = new Story();
this.LoadStory();
this.AddIssueCommand = new DelegateCommand(new Action(this.AddIssueCommandExecute));
}
public void AddIssueCommandExecute()
{
if (SelectStory != null)
{
System.Windows.MessageBox.Show("Add an Issue" + SelectStory.Title + "!");
}
else
{
System.Windows.MessageBox.Show("choose an story first!");
}
//System.Windows.MessageBox.Show("record" + RecordIndex);
}
}![What I need][1]
Thank you very much
Expanding on Bolu's comment you could use SelectedItem
to get the current item. Below is a quick example:
<DataGrid ItemsSource="{Binding Source}" SelectedItem="{Binding SelectedItemProperty, Mode=TwoWay}">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Command="{Binding MyCommand}" Header="MyCommand"/>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Key, Mode=TwoWay}" Width="1*"/>
<DataGridTextColumn Header="Value" Binding="{Binding Value, Mode=TwoWay}" Width="3*"/>
</DataGrid.Columns>
</DataGrid>
SelectedItem
is now bound to SelectedItemProperty
in the ViewModel.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With