我需要能够将唯一命令传递给在DataGrid中从XML生成的超链接。
如果我以这种方式将它们直接指向超链接,那么我在该工作背后的代码中有命令。
<Hyperlink Style="{DynamicResource DataGridCellStyleHyperlink}" Command="{x:Static local:MainWindow.LaunchFirstCommand}">
我需要做类似的事情,但动态地为单元格内的每个超链接分配不同的命令。所有超链接都是从XML生成的。我相信我需要有某种转换器才能做到这一点。我无法使其正常工作。任何建议都非常感谢。提前谢谢。
这是在DataGrid中生成内容的XMLDataProdider代码。我试图将'Command'值作为字符串传递:
<XmlDataProvider x:Key="MoreInfoDataGridLocal" XPath="MoreInfoTiles/Servers">
<x:XData>
<MoreInfoTiles xmlns="">
<Servers Name="Test1" Status="003" Name2="Connection 2" Status2="assigned" />
<Servers Name="Test2" Status="Not activated" Name2="Address" Status2="test" />
<Servers Name="Test3" Status="Disabled" Name2="Address" Status2="None" Command="x:Static local:MainWindow.LaunchFirstCommand"/>
</MoreInfoTiles>
</x:XData>
</XmlDataProvider>
我可以成功生成文本字符串,但命令没有做任何事情。下面是我将它连接到datagrid中的超链接的代码:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock >
<Hyperlink Style="{DynamicResource DataGridCellStyleHyperlink}" Command="{Binding XPath=@Command}" >
<TextBlock Text="{Binding XPath=@Status}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
答案 0 :(得分:2)
是的,您需要使用IValueConverter将字符串转换为命令对象。您的命令绑定将如下所示:
Command="{Binding XPath=@Command, Converter={StaticResource MyStringToCommandConverter}}"
您将需要一个作为资源创建的转换器实例:
<MyStringToCommandConverter x:Key="MyStringToCommandConverter"/>
除此之外,您只需要创建MyStringToCommandConverter(或任何您命名的)类,实现IValueConverter,并在Convert方法中将“value”字符串转换为您的一个路由命令。一个简单的转换器看起来像这样:
public class MyStringToCommandConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string commandType = value as String;
if (commandType == "LaunchFirstCommand")
return MainWindow.LaunchFirstCommand;
if (commandType == "OtherCommand")
return MainWindow.OtherCommand;
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new System.NotImplementedException();
}
}