我班的IFrame可以包含其他的IFrame:ItemsControl內的依賴屬性的UserControl:如何將ItemSource的元素綁定到x:UserControl的名稱?
public interface IFrame
{
int Id { get; }
string Summary { get; }
BindableCollection<IFrame> SubFrames { get; set; }
}
爲了呈現一個IFrame,我有一個自定義用戶控件:
<UserControl x:Class="Views.FrameView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:Views="clr-namespace:Views"
mc:Ignorable="d"
x:Name="FrameXName">
<StackPanel Orientation="Horizontal">
<Label Content="{Binding ElementName=FrameXName, Path=Id}" Width="50"/>
</StackPanel>
</UserControl>
隨着代碼隱藏:
public partial class FrameView : UserControl
{
public FrameView()
{
InitializeComponent();
}
public static DependencyProperty IdProperty = DependencyProperty.Register(
"Id", typeof(int), typeof(FrameView));
public int Id
{
get { return (int) GetValue(IdProperty); }
set { SetValue(IdProperty, value); }
}
}
這樣我可以顯示FooView.xaml中的幀使用: <Views:FrameView x:Name="Frame1" Width="50" Height="50"/>
如果我在FooViewModel.cs中定義了以下內容: public IFrame Frame1 { get { return Frames.ElementAt(1); } }
我的目標:
我想有一個FrameView集合中顯示的每一個IFRAME,例如:
<ItemsControl ItemsSource="{Binding Frames}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Views:FrameView x:Name="{Binding}" Width="50" Height="50"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
凡public BindableCollection<IFrame> Frames
定義。
不幸的是,這並不工作,編譯器說:MarkupExtensions are not allowed for Uid or Name property values, so '{Binding}' is not valid.
我如何能實現我的目標是什麼?提前謝謝了。
我已經回答了我的問題,但可以在8小時內才正式回答。在此之前: 所以看來,我的UserControl XAML標籤在依賴屬性發生變化時都是錯誤的。 如果我使用'id =「{Binding Path = Id}」'而不是'x:Name =「」'並從我的UserControl定義中移除'x:Name =「FrameXName」''一切正常 – Caroline