2016-04-26 12 views
2

私は、Universal Windows Platformアプリケーションでmvvmロジックを処理しようとしています。すべて静的バインディングとobservableCollectionsでうまく動作しますが、私はバインドボタンでClickイベントをboolプロパティに詰め込みました。理論的にはSplitViewIsPaneOpen状態に影響するはずです。最初は見た目が綺麗に見え、警告もなくビルドされていますが、何らかの形でそれがプロパティの変更を観察可能にすることができません。 ここに私のMainPageViewModel.csです:IsPaneOpenをboolプロパティにバインドする問題

public class MainPageViewModel : INotifyPropertyChanged 
{ 

    public string Title 
    { 
     get 
     { 
      return "String!"; // it works 
     } 
    } 

    private bool _isPaneOpen; // false 

    public bool isPaneOpen // x:Bind to SplitViews's "IsPaneOpen" property 
    { 
     get { return _isPaneOpen; } // false 
     set 
     { 
      if (value != this._isPaneOpen) 
      { 
       Debug.WriteLine(_isPaneOpen); // false 
       _isPaneOpen = value; // false -> true 
       Debug.WriteLine(_isPaneOpen); // true 
       this.OnPropertyChanged("isPaneOpen"); // and nothing happended... 
      } 
     } 
    } 

    public void changePaneState() // x:Bind to button 
    { 
     isPaneOpen = !isPaneOpen; // true 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

そして、ここでは、MainPage.xamlをです:

<StackPanel Orientation="Horizontal" Grid.Column="0"> 
       <Button Background="#eee" Name="Back" Height="50" Width="50" FontFamily="Segoe MDL2 Assets" FontSize="22" Content="&#xE0D5;" Click="{x:Bind ViewModel.changePaneState}"/> 
       <TextBlock VerticalAlignment="Center" 
          Margin="10 0 0 0" 
          Name="DebugTextBlock" FontSize="18" Text="{x:Bind ViewModel.Title}" 
          FontWeight="SemiBold"/> 
      </StackPanel> 
     </Grid> 
    </Grid> 
    <SplitView Name="SideBar" IsPaneOpen="{x:Bind ViewModel.isPaneOpen}" Style="{StaticResource SplitViewStyle}"> 
     <SplitView.Pane> 
      <Grid> 

うまくいかないかもしれないものを任意のアイデア?あなたが与えられているはずUIで反映させるため、ViewModelにに変更を行っているので、

答えて

2

モードは、TwoWayあるべきTwoWayモード

IsPaneOpen="{x:Bind ViewModel.isPaneOpen,Mode=TwoWay}" 
+2

作業完璧!ありがとう。 – vrodis

0

X:バインドモードがデフォルトであるワンタイム(古典的な結合片道です) 。したがって、明示的にバインディングモードをOneWayまたはTwoWayに設定する必要があります。

IsPaneOpen="{x:Bind ViewModel.isPaneOpen,Mode=OneWay}" 
関連する問題