2016-02-01 101 views
1

我试图用ListPickerFlyout使用MVVM创建一个自定义按钮。我想达到的结果是类似的东西:双向数据绑定与Windows Phone 8.1上的MVVM灯

custom Button with ListPickerFlyout

我的问题是如何从ListPickerFlyoutSelectedItem绑定到内容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"); 
     } 
    } 
} 
+0

看来你做到这一点。你如何设置SelectedItem?你期望在文本块中有什么?运行应用程序时,文本块中有什么? – Will

+0

欢迎来到StackOverflow迭戈。请遵循http://stackoverflow.com/help/tagging上的标签指南,不要强制标签进入问题标题,除非它们是标题的自然部分。我已经将您的问题标题编辑为更自然的形式。 – Tseng

回答

0

只需要添加的RaisePropertyChanged("SelectedItem");在MVVM类。

的完整代码:

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