数据绑定在Silverlight中不起作用

时间:2015-07-23 23:39:51

标签: c# wpf wcf silverlight windows-phone-8.1

我试图做一些简单的数据绑定。我有一个集合,返回一个名为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)
            {

            }
        }

我想我错过了一些明显的东西。你觉得怎么样?

2 个答案:

答案 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的简洁示例。