2

私はwpf c#を初めて使用し、いくつかのサンプルアプリケーションを試しています。問題はDataContext、xamlでInitializeComponent再帰的に呼び出されて表示されていることを言及したときです

mscorlib.dll で「System.StackOverflowException」が発生しました

これは私の XAML マークアップです。

<Window x:Class="Company1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Company1"
    Title="MainWindow" Height="350" Width="525" >
<Window.DataContext>
   <local:MainWindow/>
</Window.DataContext>
  <Grid>
     <GroupBox Margin="5,5,5,5" Background="Beige">
         <Grid>
             <StackPanel>
                <Button Width="80" Height="25" Margin="10,10,10,10" 
                        Content="Employee" Command="{Binding ButtonCommand}"
                        DataContext="{Binding }">
                </Button>
            </StackPanel>
            <DataGrid 
                  Name="myGridView" Margin="5,69,5,5" 
                  Width="Auto" AutoGenerateColumns="True"
                  AlternatingRowBackground="Bisque">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Name"
                                        Binding="{Binding Path=EmpName}" 
                                        Width="*" IsReadOnly="True"/>
                    <DataGridTextColumn Header="ID" 
                                        Binding="{Binding Path=EmpId}" 
                                        Width="*" IsReadOnly="True"/>
                    <DataGridTextColumn Header="Place" 
                                        Binding="{Binding Path=Location}" 
                                        Width="*" IsReadOnly="False"/>
                    <DataGridTextColumn Header="Dept" 
                                        Binding="{Binding Path=Department}" 
                                        Width="*" IsReadOnly="True"/>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </GroupBox>
</Grid>
</Window>

XAML.cs:

 private ICommand m_ButtonCommand;
 public ICommand ButtonCommand
 {
     get { return m_ButtonCommand; }
     set { m_ButtonCommand = value; }
 }
 public MainWindow()
 {
     InitializeComponent();
     ButtonCommand = new RelayCommand(new Action<object>(ShowEmployees));
 }
4

2 に答える 2

1

DataContextプロパティは次のように記述されます。

親要素内のバインディングのデータコンテキストとして機能する、直接埋め込まれたオブジェクト。通常、このオブジェクトはBindingまたは別のBindingBase派生クラスです。または、バインディングを目的とした任意のCLRオブジェクトタイプの生データをここに配置し、実際のバインディングを後で定義することもできます。

XAMLでは、メインウィンドウのDataContextは....メインウィンドウです。したがって、メインウィンドウの別のインスタンスが作成されます。タイプのDataContextがあります...メインウィンドウ。

したがって、メインウィンドウの別のインスタンスが作成されます。タイプのDataContextがあります...メインウィンドウ。

したがって、メインウィンドウの別のインスタンスが作成されます。タイプのDataContextがあります...メインウィンドウ。

したがって、メインウィンドウの別のインスタンスが作成されます。タイプのDataContextがあります...メインウィンドウ。

それで ...

;)

DataContextを、ウィンドウ自体ではなく、ウィンドウをバインドするデータを含むオブジェクトに設定します。

お役に立てれば

于 2013-01-04T07:03:37.630 に答える