如何设置AppBar DataContext

时间:2014-09-09 21:13:16

标签: xaml windows-store-apps mvvm-light

据我所知,好像什么都没有联系起来。文本框不会获取值或在VM中设置值,并且单击时不会触发按钮命令。

<Page.TopAppBar>
    <AppBar>
        <AppBar.DataContext>
            <Binding Path="AppBar" Source="{StaticResource Locator}"/>
        </AppBar.DataContext>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="auto"></ColumnDefinition>
                <ColumnDefinition Width="auto"></ColumnDefinition>
                <ColumnDefinition Width="auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <TextBox Margin="0,0,20,0" TextAlignment="Center" Height="25" Grid.Column="0" Text="{Binding IPAddress}"></TextBox>
            <TextBox Margin="0,0,20,0" TextAlignment="Center" Height="25" Grid.Column="1" Text="{Binding Port}"></TextBox>
            <Button Grid.Column="2" Command="{Binding SaveCommand}">Save</Button>
        </Grid>
    </AppBar>
</Page.TopAppBar>
<Page.DataContext>
    <Binding Path="Main" Source="{StaticResource Locator}"/>        
</Page.DataContext>

2 个答案:

答案 0 :(得分:0)

您是否尝试过调试eventhandler AppBar.DataContextChanged? app bar的datacontext最初设置为正确的值,但是当新的datacontext为null时,再次执行数据上下文更改时,它会变坏。所以我建议添加一个开关,以便在显示空值时恢复到良好的datacontext。

XAML

<AppBar DataContextChanged="AppBar_DataContextChanged" ... />

C#

    private object _dataContext;
    private void AppBar_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args)
    {
        if (args.NewValue != null)
        {
            if (_dataContext == null)
            {
                _dataContext = args.NewValue;
            }
        }
        else
        {
            if (_dataContext != null)
            {
                sender.DataContext = _dataContext;
            }
        }
    }

如果您希望文本框更新视图模型,则绑定模式必须为TwoWay。

<TextBox Margin="0,0,20,0" TextAlignment="Center" Height="25" Grid.Column="0" Text="{Binding IPAddress, Mode=TwoWay}"></TextBox>
<TextBox Margin="0,0,20,0" TextAlignment="Center" Height="25" Grid.Column="1" Text="{Binding Port, Mode=TwoWay}"></TextBox>

答案 1 :(得分:0)

如果我没有错,Windows 8商店应用程序不支持在应用程序栏中进行绑定。

更多关于此处的讨论, http://social.msdn.microsoft.com/Forums/windowsapps/en-US/a27c9c88-82c5-43fb-9fd9-6ae36dc39af6/appbar-databinding-does-not-work-because-datacontext-is-not-available?forum=winappswithcsharp