【发布时间】:2011-01-20 20:17:31
【问题描述】:
我有一个场景,我需要在检查驻留在单独的“选项”窗口中的 RadioButton 后更改数据网格中超链接的名称。我使用分配给同一超链接的 ICommand 启动此“选项”窗口。我无法重命名超链接名称。超链接是使用 XMLDataProvider 从 XML 生成的。我还使用将 XML 字符串转换为 ICommand 的 IValueConverter。我希望在这里找到解决方案。先感谢您。
测试解决方案链接: http://cid-0c29483cf3a6a14d.office.live.com/self.aspx/WPF%5E_Tests/RenameHyperlinkText.zip
代码如下。
在主窗口中生成带有超链接 XAML 的 dataGrid:
<Window.Resources>
<local:MyStringToCommandConverter x:Key="MyStringToCommandConverter"/>
<XmlDataProvider x:Key="MainDataGridLocal" XPath="ServicesTiles/Servers">
<x:XData>
<ServicesTiles xmlns="">
<Servers Name="Name 1" Status="None" Name2="Name 2" Status2="Never" Command="LaunchOptionsWindowCommand" />
<Servers Name="Name 3" Status="none" Name2="Name 4" Status2="None" />
</ServicesTiles>
</x:XData>
</XmlDataProvider>
</Window.Resources>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource MainDataGridLocal}}">
<DataGrid x:Name="MainGrid" AutoGenerateColumns="False" ItemsSource="{Binding XPath=/ServicesTiles/Servers}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding XPath=@Name}" />
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock >
<Hyperlink Command="{Binding XPath=@Command, Converter={StaticResource MyStringToCommandConverter}}" >
<TextBlock Text="{Binding XPath=@Status}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding XPath=@Status2}"/>
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock >
<Hyperlink >
<TextBlock Text="{Binding XPath=@Status2}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
运行命令的代码:
public partial class MainWindow : Window
{
public static RoutedUICommand OptionsWindowCommand = new RoutedUICommand("Options...", "Options", typeof(MainWindow));
public MainWindow()
{
this.InitializeComponent();
this.CommandBindings.Add(new CommandBinding(OptionsWindowCommand, OptionsWindowCommandExecuted));
}
private void OptionsWindowCommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
OptionsWindow theDialog = new OptionsWindow();
if ( theDialog != null )
theDialog.ShowDialog();
}
}
带有 RadioButtons 和 OK 按钮的 OptionsWindow XAML:
<Grid x:Name="LayoutRoot" Height="250" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Content="Cancel" VerticalAlignment="Bottom" Margin="0,0,20,0" OpacityMask="#FFE0DADA" IsCancel="True" HorizontalAlignment="Right" Width="75"/>
<Button Content="OK" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="75" Margin="0,0,103.06,0" IsDefault="True" />
<StackPanel HorizontalAlignment="Center" Width="158" VerticalAlignment="Center">
<RadioButton x:Name="a_RD" Content="1_RD" Height="25"/>
<RadioButton x:Name="b_RD" Content="2_RD;" IsChecked="True" Height="25"/>
<RadioButton x:Name="c_RD" Content="3_RD" Height="25"/>
</StackPanel>
</Grid>
【问题讨论】:
-
我查看了您的代码,但不确定我是否理解您想要做什么。启动对话框后,选择一个值,然后要更改“超链接的名称”。这是否意味着您想根据您在对话框中选择的内容将“名称”的值更改为某个值?名称是否与
<DataGridTextColumn Binding="{Binding XPath=@Name}" />一起显示? -
我想将 'Status' 节点属性的字符串更改为 'Available' 而不是 'None'。抱歉解释不佳。如果现在清楚请告诉我。
-
是的,您理解正确。当您选择 RadioButton 然后单击“确定”按钮时,应该会发生更改。再次感谢您。
-
更新了我的答案,这和你要找的很接近吗?
标签: c# wpf wpf-controls wpfdatagrid