数据绑定在silverlight中不工作

本文关键字:工作 silverlight 数据绑定 | 更新日期: 2023-09-27 18:04:27

我想做一些简单的数据绑定。我有一个集合,它返回一个带有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)
            {
            }
        }

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

数据绑定在silverlight中不工作

使用每个控件在其数据上下文未设置时将使用的页面的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主页实例化和加载策略以简化绑定》中给出了一个简短的绑定、数据上下文和MVVM的例子。

我建议您使用"StandardUI"作为您的视图(或LayoutRoot)的数据上下文,然后使用"MenuItems"作为StackPanel的ItemsSource。然后,您可以添加许多属性,因为你想standardi和使用他们在其他控件。比如mvvm模式。div;)