我有这段代码:
<Menu ItemsSource="{Binding TopMenu.MenuItems}">
</Menu>
这可以按预期工作。但是,我想将ItemsSource定义为Menu
的子元素,而不是属性。我试过这个:
<Menu>
<Menu.ItemsSource>{Binding TopMenu.MenuItems}</Menu.ItemsSource>
</Menu>
但似乎无效。
我怎样才能做到这一点?
修改
我想这样做是为了更好地布置我的文件。例如,我有许多属性的元素,如:
<ListView HorizontalContentAlignment="Stretch" Style="{StaticResource ListBoxInnerGroupStyle}" ItemsSource="{Binding Items}"
Visibility="{Binding Visible,
Converter={StaticResource BoolToVis}}"
PreviewMouseWheel="ChildListView_PreviewMouseWheel">
使用ListView
具有的所有属性,很难对文档进行布局,以避免很长,难以读取的行。特别是大Visibility
属性很难格式化。因此,我想将像这样的大型属性更改为子元素。对于上面的例子,我认为这更容易阅读:
<ListView HorizontalContentAlignment="Stretch" Style="{StaticResource ListBoxInnerGroupStyle}" ItemsSource="{Binding Items}"
PreviewMouseWheel="ChildListView_PreviewMouseWheel">
<ListView.Visibility>
{Binding Visible, Converter={StaticResource BoolToVis}}
</ListView.Visibility>
答案 0 :(得分:4)
Markup Extensions(例如System.Windows.Data.Binding
)能够&#34;提供值&#34; ,它只是一个对象的实例,然后是添加到对象图中,或由XAML处理器以不同方式处理。
简而言之,这意味着语法:
<Menu ItemsSource="{Binding TopMenu.MenuItems}"/>
由XAML处理器翻译成如下:
var menu = new Menu();
menu.ItemsSource = new Binding{Path = "TopMenu.MenuItems"});
当然上面的内容并不完全是这样,因为Binding
MarkupExtension另有说明,但你明白了。
如果您要创建C#代码中定义的上述对象图的XAML表示,那将是:
<Menu>
<Menu.ItemsSource>
<Binding Path="TopMenu.MenuItems"/>
</Menu.ItemsSource>
</Menu>