【问题标题】:TwoWay Data Binding with MVVM Light on Windows Phone 8.1Windows Phone 8.1 上使用 MVVM Light 的双向数据绑定
【发布时间】:2016-05-10 07:59:07
【问题描述】:

我正在尝试使用 MVVM 创建带有 ListPickerFlyout 的自定义按钮。我想要达到的结果是这样的:

custom Button with ListPickerFlyout

我的问题是如何将SelectedItem 中的ListPickerFlyout 绑定到内容TextBlock

我正在使用 MVVM Light Windows Phone 8.1 (Store Appp)。

我的 Xaml 代码:

<Button Background="White"
    HorizontalAlignment="Stretch" 
    HorizontalContentAlignment="Stretch">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="40" />
    </Grid.ColumnDefinitions>

    <!-- Content TextBlock -->
    <TextBlock Text="{Binding MyVM.SelectedItem, Mode=TwoWay}"
                Style="{StaticResource DefaultTextBlock}"
                FontSize="22"
                HorizontalAlignment="Left"
                VerticalAlignment="Center"
                Margin="10, 0, 0, 0"/>

    <Image Height="20"  Grid.Column="1"
            VerticalAlignment="Center" HorizontalAlignment="Center"
            Source="../Assets/icons/arrow_down.png"/>
</Grid>

<Button.Flyout>
    <ListPickerFlyout PickerFlyoutBase.Title="$Items$"
                        ItemsSource="{Binding MyVM.listItems}"
                        SelectedItem="{Binding MyVM.SelectedItem, Mode=TwoWay}" >
        <ListPickerFlyout.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding}"
                                Style="{StaticResource DefaultTextBlock}"
                                FontSize="22"/>
                </StackPanel>
            </DataTemplate>
        </ListPickerFlyout.ItemTemplate>
    </ListPickerFlyout>
</Button.Flyout>

在 MyVM 中我有

public string SelectedItem { get; set; }

编辑:

问题解决了,忘记加RaisePropertyChanged("SelectedItem");了。

所以,在我的 MVVM 类中:

private string _selectedItem;
public string SelectedItem
{
    get { return _selectedItem; }
    set
    {
        if (_selectedItem != value)
        {
            _selectedItem = value;
            RaisePropertyChanged("SelectedItem");
        }
    }
}

【问题讨论】:

  • 看来你已经做到了。你是如何设置 SelectedItem 的?您希望在文本块中出现什么?运行应用程序时,文本块中有什么内容?
  • 欢迎来到 StackOverflow Diego。请遵循stackoverflow.com/help/tagging 中的标记指南,不要将标记强加到您的问题标题中,除非它们是标题的自然部分。我已将您的问题标题编辑成更自然的形式。

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


【解决方案1】:

只需在 MVVM 类中添加RaisePropertyChanged("SelectedItem");即可。

完整代码:

private string _selectedItem;
public string SelectedItem
{
    get { return _selectedItem; }
    set
    {
        if (_selectedItem != value)
        {
            _selectedItem = value;
            RaisePropertyChanged("SelectedItem");
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多