0

ViewModelのWPF MVVM XAMLのテキストボックスがバインドされているのと同じデータにアクセスしたい

MainWindow.xaml の XAML には、StoredProcs/ProcName にバインドされたテキスト ボックスがあります。

<TextBox Name="txtProcName" Text="{Binding Path=StoredProcs/ProcName}"></TextBox>

そして、StoredProcs にバインドされたグリッド グリッドの選択が変更されるたびに、テキスト ボックス内のバインドされたテキストが変更されます。

<DataGrid AutoGenerateColumns="False" 
    Height="300" Width="290"
    HorizontalAlignment="Center" 
    Name="dataGrid1" 
    VerticalAlignment="Top" 
    ItemsSource="{Binding StoredProcs}" 
    IsSynchronizedWithCurrentItem="True" 
    Margin="-6,0" Grid.RowSpan="2" Grid.Row="0">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Proc Name" Binding="{Binding ProcName}" >
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

クリックすると MainWindowViewModel でプロシージャを実行するボタンがあり、機能します

<Button Content="Create RDL" Command="{Binding CreateStoredProcedure}" />

CreateStoredProcedure コードでは、テキスト ボックスに表示されるのと同じデータにアクセスする必要があります (コード ビハインドは使用しません)。StoredProcs/ProcName を取得する必要があると思いますが、その方法がわかりません。

CommandParameter を XAML に追加しようとしましたが、パラメーターを追加できないため、CreateStoredProcedure 命令でアクセスする方法がわかりません

void CreateStoredProcedureExecute()
{
    string procName = "proc";
    //procName = { StoredProcs/ProcName };
    MessageBoxResult result = 
        MessageBox.Show(String.Format("Create Stored Procedure {0}", procName));
}

bool CanCreateStoredProcedure()
{
    return true;
}

public ICommand CreateStoredProcedure 
{ 
    get 
    { 
        return new RelayCommand(CreateStoredProcedureExecute, 
            CanCreateStoredProcedure); 
    } 
}
4

3 に答える 3

1

私があなたの質問を誤解していない限り、CreateStoredProcedure 内から TextBox がバインドされているプロパティの値を取得できるはずです。

ただし、TextBox でプロパティを更新する場合は、バインド式に "Mode=TwoWay" を追加してください。

<TextBox Name="txtProcName" Text="{Binding Path=StoredProcs/ProcName, Mode=TwoWay}"></TextBox>
于 2012-06-15T17:42:39.973 に答える
0

KDiTraglia には適切なソリューションがあると思います。CommandParameter私が別の方法で行う唯一のことは、UI 要素ではなくモデルにバインドすることです。

<Button 
     Content="Create RDL"
     Command="{Binding CreateStoredProcedure}" 
     CommandParameter="{Binding Path=StoredProcs/ProcName}" />

StoredProcs/ProcNameこれは、実際の有効なバインド パスのプレースホルダーであると想定しています。

詳細については、こちらを参照してください: http://msdn.microsoft.com/en-us/library/ms752308

于 2012-06-15T19:06:23.210 に答える