Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF:是否可以将以下代码从过程性(C#)转换为声明性(XAML)?_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

WPF:是否可以将以下代码从过程性(C#)转换为声明性(XAML)?

WPF:是否可以将以下代码从过程性(C#)转换为声明性(XAML)?,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我在窗口中有以下内容(删除了不必要的部分): XAML: 现在我想做的是将上述xaml和C#的混合转换成纯粹的xaml,以利用WPF的数据绑定模型 我认为它需要一些东西,比如事件触发器和数据绑定与itemscontrol元素的选定项的组合,或者类似的东西,但我不确定如何进行 有人能告诉我如何转换上述解决方案以删除过程代码吗?如果您使用的是.NET 3.5SP1,您可能可以使用新的StringFormat绑定标记扩展来完成此操作。有关使用StringFormat绑定的示例,请参见 如果.NET3

我在
窗口中有以下内容(删除了不必要的部分):

XAML:


现在我想做的是将上述xaml和C#的混合转换成纯粹的xaml,以利用WPF的数据绑定模型

我认为它需要一些东西,比如事件触发器和数据绑定与itemscontrol元素的选定项的组合,或者类似的东西,但我不确定如何进行


有人能告诉我如何转换上述解决方案以删除过程代码吗?

如果您使用的是.NET 3.5SP1,您可能可以使用新的StringFormat绑定标记扩展来完成此操作。有关使用StringFormat绑定的示例,请参见


如果.NET3.5SP1不是一个选项,那么您可能必须创建自己的ValueConverter。将
SourceUrl
属性的值绑定到选定的艺术家ID,然后在转换器中返回与上面C#示例中使用的字符串相同的字符串。

如果您使用的是.NET 3.5SP1,则可能可以使用新的StringFormat绑定标记扩展名来执行此操作。有关使用StringFormat绑定的示例,请参见

<ItemsControl ItemsSource="{Binding ArtistList}" Margin="10" Name="artist_list" ItemContainerStyle="{StaticResource itemstyle}" >
        <ItemsControl.ItemTemplate>
                <DataTemplate>
                                <TextBlock Text="{Binding ID}" Foreground="White"/>
                </DataTemplate>
        </ItemsControl.ItemTemplate>
</ItemsControl>

<Controls:RSSViewer x:Name="rssControl" SourceUrl="{Binding SelectedItem.ID, ElementName=artist_list, StringFormat= 'http://agnt666laptop:28666/rss.aspx?artistid={0}' }" />
如果.NET3.5SP1不是一个选项,那么您可能必须创建自己的ValueConverter。将
SourceUrl
属性的值绑定到选定的艺术家ID,然后在转换器中返回与上面C#示例中使用的相同字符串。


<ItemsControl ItemsSource="{Binding ArtistList}" Margin="10" Name="artist_list" ItemContainerStyle="{StaticResource itemstyle}" >
        <ItemsControl.ItemTemplate>
                <DataTemplate>
                                <TextBlock Text="{Binding ID}" Foreground="White"/>
                </DataTemplate>
        </ItemsControl.ItemTemplate>
</ItemsControl>

<Controls:RSSViewer x:Name="rssControl" SourceUrl="{Binding SelectedItem.ID, ElementName=artist_list, StringFormat= 'http://agnt666laptop:28666/rss.aspx?artistid={0}' }" />


它不工作:System.Windows.Data错误:4:找不到引用为“ElementName=artist\u list”的绑定源。BindingExpression:Path=SelectedItem.ID;DataItem=null;目标元素是“RSSViewer”(Name='rssControl');目标属性为“SourceUrl”(类型为“String”),我认为ItemsControl没有SelectedItems属性。如果你想选择,你需要使用ListBox或ListView。Andy是的,ItemsControl没有SelectedItem属性…所以我们必须用另一种方法来做是的,没错。。。您可以使用选择器而不是ItemsControl它不工作:System.Windows.Data错误:4:找不到引用为“ElementName=Artister_list”的绑定源。BindingExpression:Path=SelectedItem.ID;DataItem=null;目标元素是“RSSViewer”(Name='rssControl');目标属性为“SourceUrl”(类型为“String”),我认为ItemsControl没有SelectedItems属性。如果你想选择,你需要使用ListBox或ListView。Andy是的,ItemsControl没有SelectedItem属性…所以我们必须用另一种方法来做是的,没错。。。您可以使用选择器而不是ItemsControl
<ItemsControl ItemsSource="{Binding ArtistList}" Margin="10" Name="artist_list" ItemContainerStyle="{StaticResource itemstyle}" >
        <ItemsControl.ItemTemplate>
                <DataTemplate>
                                <TextBlock Text="{Binding ID}" Foreground="White"/>
                </DataTemplate>
        </ItemsControl.ItemTemplate>
</ItemsControl>

<Controls:RSSViewer x:Name="rssControl" SourceUrl="{Binding SelectedItem.ID, ElementName=artist_list, StringFormat= 'http://agnt666laptop:28666/rss.aspx?artistid={0}' }" />