Я не уверен, что полностью понял ваш вопрос, но в любом случае я принял удар. Вы можете использовать CommandParameter
для отправки параметра с помощью команды. Если вы используете CommandParameter="{Binding}"
, вы получите соответствующий XmlLinkedNode
для строки, по которой щелкнули (то есть ее DataContext
), и оттуда вы можете получить доступ к атрибутам в ней.
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock >
<Hyperlink Command="{Binding XPath=@Command, Converter={StaticResource MyStringToCommandConverter}}"
CommandParameter="{Binding}">
<TextBlock Text="{Binding XPath=@Status}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Тогда вы могли бы сделать что-то подобное в OptionsWindowCommandExecuted
. Могу добавить, что я не очень знаком с XmlDataProvider
, поэтому Attributes["Status"].Value
может быть не рекомендуемым способом:)
private void OptionsWindowCommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
OptionsWindow theDialog = new OptionsWindow();
XmlLinkedNode xmlLinkedNode = e.Parameter as XmlLinkedNode;
if (theDialog != null)
{
if (theDialog.ShowDialog() == true)
{
xmlLinkedNode.Attributes["Status"].Value = "Available";
}
}
}
Обновление
Пример кода для установки различных значений в зависимости от того, какой RadioButton
пользователь проверил
В OptionsWindow.xaml.cs
public string CheckedRadioButtonContent
{
get;
set;
}
private void OKButton_Click(object sender, RoutedEventArgs e)
{
if (a_RD.IsChecked == true)
{
CheckedRadioButtonContent = a_RD.Content.ToString();
}
else if (b_RD.IsChecked == true)
{
CheckedRadioButtonContent = b_RD.Content.ToString();
}
else if (c_RD.IsChecked == true)
{
CheckedRadioButtonContent = c_RD.Content.ToString();
}
DialogResult = true;
}
MainWindow.xaml.cs
private void OptionsWindowCommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
OptionsWindow theDialog = new OptionsWindow();
XmlLinkedNode xmlLinkedNode = e.Parameter as XmlLinkedNode;
if (theDialog != null)
{
if (theDialog.ShowDialog() == true)
{
string checkedRadioButtonContent = theDialog.CheckedRadioButtonContent;
xmlLinkedNode.Attributes["Status"].Value = "Available_" + checkedRadioButtonContent;
}
}
}