2016-11-15 21 views
1

私はボタンをクリックしてusercontrolを閉じようとしています。 usercontrolは、メインウィンドウのグリッド内にあります。メインウィンドウのグリッドでUserControlを閉じる

これは私がそれを開いて動作する方法です。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     UsLogin _UsLogin = new UsLogin(); 
     OpenUserControl(_UsLogin); 

    } 

    private void OpenUserControl(UsLogin _UsLogin) 
    { 
     grdVensters.Children.Add(_UsLogin); 
    } 
} 

ここでusercontrolにはログインを確認するボタンがあります。 (コードはまだありませんが、これはクラスでどのように見せたいのですか) このボタンをgrdVenstersでこのユーザーコントロールを閉じてメインウィンドウを準備しておきます。

私のusercontrolでgrdVenstersにアクセスできないようです。私はリンクを作ることができますか?

試してみました。Close current UserControl でも、私の望むものではありませんが、最善の答えはMainWindowを閉じます。

これは私が必要としているように見えますが、私の場合はうまくいかないようです。 Causing a UserControl to remove itself (WPF)

ありがとうございます!

+0

の背後にあるコードは、表示/非表示やグリッドの子コレクションから削除を意味する可能性があります。 UCのVisibilityプロパティをUC側で折りたたむように設定するのが最善です。そうしないと、ツリーを横断してグリッドにアクセスできます。 'VisualTreeHelper'クラスがこれを助けます。 – AnjumSKhan

+0

私は問題を完全に受け取りませんが、マットを理解し、同意します。他の解決方法は、アクションをコントロールに渡すことです。コントロール内のボタンをクリックすると、アクションが呼び出されます。コンストラクタ内でアクションを渡すことも、プロパティを介してアクションを公開することもできます。アクションの実装(メインウィンドウクラスに存在)で、 'grdVensters.Children.Remove(_UsLogin);'を呼び出します。これは、汗をかくために行うべきではありません。正直言って、あなたはWPFを使っているのでMVVMに行くでしょう。 –

答えて

0

WPFで作業する場合は、MVVMに行くべきです。ウェブにはたくさんのリソースがあります。しかし、私はあなたに正しい方向に導く小さな例を作りました。 ViewModelの相関プロパティを設定すると、ログインビューを表示/非表示できます。 BooleanToVisibilityConverterboolの値をVisibilityの値に変換します。また、可視状態を変更する方法の簡単な例を示すためにCheckBoxを追加しました。

XAML

<StackPanel> 
    <StackPanel.Resources> 
     <BooleanToVisibilityConverter x:Key="bToV" /> 
    </StackPanel.Resources> 
    <CheckBox IsChecked="{Binding Path=IsLoginVisible, UpdateSourceTrigger=PropertyChanged}" /> 
    <Button Content="Login" 
      Visibility="{Binding Path=IsLoginVisible, Converter={StaticResource bToV}}" /> 
    <!--<yournamespace:UsLogin Visibility="{Binding Path=IsLoginVisible, Converter={StaticResource bToV}}/>--> 
</StackPanel> 

ここに閉会

public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     this.InitializeComponent(); 

     DataContext = new MainViewModel(); 
    } 
} 

public class MainViewModel : ViewModelBase 
{ 
    private bool _isLoginVisible; 
    public bool IsLoginVisible 
    { 
     get 
     { 
      return _isLoginVisible; 
     } 
     set 
     { 
      _isLoginVisible = value; 
      OnPropertyChanged(); 
     } 
    } 
} 
+0

こんにちは、お返事いただきありがとうございます。私は学生であり、まだMVVMをカバーしていません(数週間後)が、これは素晴らしい例です。タイ! –

+0

@JurgenVoldersだからあなたは答えを受け入れたいですか?または少なくともupvoteを与えるか? ;-) – Mat

+0

私の最初の質問は残念でした;)私は受け入れてupvotedしかし、私の担当者atm以来15あなたは私が信じて表示されません。 –

関連する問題