我试图做一些简单的数据绑定。我有一个集合,返回一个名为MenuName属性的项目。我已经检查过它是否正确返回。所以这就是我试图进行绑定的方式。 (由菜单继承自INotifyPropertyChanged。)
XAML
<Grid x:Name="LayoutRoot" DataContext="MenuItems">
<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Grid.Row="0" Margin="24,17,0,28">
<TextBlock Text="Test" Typography.Capitals="SmallCaps"/>
<TextBlock Text="{Binding MenuName }" Margin="0,12,0,0" FontSize="52"/>
<CheckBox>Cache</CheckBox>
</StackPanel>
</Grid>
代码背后:
#region Members
MyAppWinConnectionClient MyAppWinService;
#endregion Members
#region Properties
public ObservableCollection<Menu> MenuItems { get; set; }
#endregion Properties
public StandardUI()
{
MyAppWinService = new MyAppWinConnectionClient();
this.InitializeComponent();
LoadTest();
}
private async void LoadTest()
{
try
{
MenuItems = await MyAppWinService.GetMenuEntriesAsync();
}
catch (FileNotFoundException ex)
{
}
}
我想我错过了一些明显的东西。你觉得怎么样?
答案 0 :(得分:1)
我建议您使用&#34; StandardUI&#34;作为视图(或LayoutRoot)的DataContext,然后使用&#34; MenuItems&#34;作为StackPanel的ItemsSource。然后,您可以根据需要向StandardUI添加许多属性,并将其用于其他控件。像mvvm模式。 ;)
答案 1 :(得分:1)
使用页面的DataContext
,如果未设置datacontext,则每个控件将使用该页面。设置页面的datacontext如下:
public StandardUI()
{
DataContext = this;
MyAppWinService = new MyAppWinConnectionClient();
this.InitializeComponent();
LoadTest();
}
然后在绑定上,提取第一个菜单项:
<Grid x:Name="LayoutRoot">
<StackPanel>
<TextBlock Text="Test" Typography.Capitals="SmallCaps"/>
<TextBlock Text="{Binding MenuItems[0].MenuName }" />
<CheckBox>Cache</CheckBox>
</StackPanel>
</Grid>
但是人们应该关注MVVM。我在我的博客文章Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding上给出了一个简短的绑定,datacontexts和MVVM的简洁示例。