2012-05-09 10 views
0

を結合WPFの中に隠されていません。ラベルは、私は今、ラベルボタンで新しい問題が発生した

<Label Name="isImageValid" Content="Image not Created" Margin="0,7,1,0" Style="{StaticResource LabelField}" 
       Grid.ColumnSpan="2" Grid.Row="15" Width="119" Height="28" Grid.RowSpan="2" 
       Grid.Column="1" IsEnabled="True" 
       Visibility="{Binding isImageValid}" /> 

そして、次は私のViewModelからのコードです::次のコードは、ビューモデルにビューをバインド

private System.Windows.Visibility _isImageValid; 
public System.Windows.Visibility isImageValid 
     { 

      get 
      { 

       return _isImageValid; 
      } 
      set 
      { 


       _isImageValid = value; 
       this.RaisePropertyChanged(() => this.isImageValid); 

      } 
     } 
    private void OnImageResizeCompleted(bool isSuccessful) 
    { 

     if (isSuccessful) 
     { 

      this.SelectedStory.KeyframeImages = true; 
      isImageValid = System.Windows.Visibility.Visible; 
     } 
     else 
     { 
      this.SelectedStory.KeyframeImages = false; 

     } 
    } 

ラベルが「OnImageResizeCompleted」が呼び出されるまで隠し滞在することを意図されていますが、何らかの理由で画像が常に見えます。私はそれを隠すために何を変える必要がありますか?

+0

が隠し/折りたたみあなたは、初期値を設定している:/ウィンドウ

あなたのコントロールは、この

<UserControl x:Class="..." x:Name="MyControl" xmlns:sysControls="clr-namespace:System.Windows.Controls;assembly=PresentationFramework" > <UserControl.Resources> <sysControls:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> </UserControl.Resources> <Grid> <Label Visibility="{Binding IsImageValid, Converter={StaticResource BooleanToVisibilityConverter}}" /> </Grid> </UserControl> 

やC#のようになるはずですか?私はあなたがプロパティでの視認性を意味しています、初期値を設定していない – Alex

+0

? – Usher

+0

私は、デフォルトでは、あなたのプロパティの値が実際に可視に設定されていることを、言うことを意味し、したがって、あなたのラベルが最初に表示されます。あなたのコードの残りの部分を提供することは隠しやトリックを行う必要が倒壊に_isImageValidをinitalising、正しいです。とにかく、それはもっと汎用的なアプローチであるので、受け入れられた答えに行くべきです。 – Alex

答えて

2

問題は実際のバインディングモードではないため、通常はに設定されていないため、ラベルは双方向バインディングを必要としません。ソースはです。

@blindmeisが示唆したように、あなたが代わりのviewmodelから直接可視性値を返すのコンバータを使用する必要があり、あなたが使用できるフレームワークに組み込まれたものがあります。それはラベルが指定されたプロパティにバインドすることはできません、その後でない場合にも、あなたのDataContextが正しく設定されていることを確認する必要があります。同じウィンドウに、ビューモデルに正しくバインドしている他のアイテムがありますか?出力ウィンドウにバインディングエラーがないかチェックしてください。最後に、プロパティが正しく通知されていることを確認する必要があります。これは、提供したコードからは分かりません。

public class MyViewModel : INotifyPropertyChanged 
{ 

    public bool IsImageValid 
    { 
     get { return _isImageValid; } 
     set 
     { 
      _isImageValid = value; 
      OnPropertyChanged("IsImageValid"); 
     } 
    } 

    protected void OnPropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private bool _isImageValid; 
} 
+0

+1は、コンバータを使用して例を与えることに怠惰でした;) – blindmeis

+0

@blindmeis私はあなたの投稿を編集してそれを追加するつもりでしたが、私はそれが大きすぎる他人の回答を編集します。 – slugster

+0

@ slugster、ありがとうございました。 – Usher

0

は、それにもかかわらず、私はのviewmodelでSystem.Windows名前空間を使用することはありません

<Label Visibility="{Binding isImageValid, Mode=TwoWay}" /> 

を双方向に結合するモードを設定してみてください。 boolプロパティを作成し、バインディングでbooltovisibilityコンバーターを使用します。

+0

ありがとうblindmeis、でも私はこのコードをstackoverflowの@ shaktiの助けによって得た – Usher

+0

私はMode = TwoWayを試しましたが、動作していないようです – Usher

+0

datacontextが正しいと確信していますか?出力ウィンドウを確認してください。あなたのコードバインディングは私のtestprojectで動作します。 – blindmeis

関連する問題