CommandParametersを他のビューからプロパティにバインドする

pushpin73

ツールバーとTabContent領域(PRISM)を備えたビュー(メインビュー)があります。TabContent領域には、同じモデル(連絡先)を異なる方法で表す2つのタブ(2つのビュー-ビューA、ビューB-)があります。

ビューAには、連絡先のあるDataGridが含まれています。メインビューのツールバーには、DeleteCommandを使用した「削除ボタン」が含まれています。DeleteCommandを使用して、ビューAから選択した連絡先をコマンドパラメーターとして送信したいのですが、以下に示すコードでは、コマンドパラメーターがnullです。メインビューがビューAにあるDataGridから選択されたアイテムを取得していないようです。これを行うにはどうすればよいですか?

これがメインビューです。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="30" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <DockPanel Grid.Row="0" Background="#D6D6DC">
        <ToolBar Style="{StaticResource ModuleToolBarStyle}">
            <TextBlock Margin="10,0,0,0" Text="Contacts"></TextBlock>
            <Button Name="addContactButton" ToolTip="Add Contact">
                <Image Source="/PrismApp.Controls;component/Images/add.png"/>
            </Button>
            <Button Name="deleteContactsButton" ToolTip="Delete selected Contacts"
                    Command="{Binding DeleteContactCommand}" CommandParameter="{Binding SelectedItems, ElementName=ContactsList}">
                <Image Source="/PrismApp.Controls;component/Images/delete.png"/>
            </Button>
            <ToggleButton Name="ViewAButton" ToolTip="View A" Command="{Binding NavigateToViewACommand}"
                          IsChecked="{Binding IsViewAActive}">
                <Image Source="/PrismApp.Controls;component/Images/listblack.png"/>
            </ToggleButton>
            <ToggleButton Name="ViewBButton" ToolTip="View B" Command="{Binding NavigateToViewBCommand}"
                          IsChecked="{Binding IsViewBActive}">
                <Image Source="/PrismApp.Controls;component/Images/tilesblack.png"/>
            </ToggleButton>
        </ToolBar>
    </DockPanel>

    <TabControl Grid.Row="1" prism:RegionManager.RegionName="ContactsViewRegion">
        <TabControl.ItemContainerStyle>
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="Visibility" Value="Collapsed"/>
            </Style>
        </TabControl.ItemContainerStyle>
    </TabControl>
</Grid>

これはビューAです:

<Grid>
    <DataGrid x:Name="ContactsList" Margin="20" AutoGenerateColumns="False" IsReadOnly="True" CanUserResizeRows="False"
              CanUserResizeColumns="True" ColumnWidth="*" ItemsSource="{Binding Contacts}">

    </DataGrid>
</Grid>

ビューモデルは、メインビュー、ビューA、およびビューBで同じです。

R.リチャーズ

私が必要だと思うことを行うために、DataGridが存在するビューで最初に必要になるのは次の名前空間です。

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

これは、DataGridに追加したいもののようなものです。具体的には、そのi:Interaction.Triggers部分:

<DataGrid x:Name="ContactsDataGrid" ItemsSource="{Binding Contacts}" Margin="20" CanUserAddRows="False"
                VerticalAlignment="Top" IsReadOnly="True" AutoGenerateColumns="False" 
                SelectionMode="Extended" SelectionUnit="FullRow">
    <DataGrid.Columns>
        ...
    </DataGrid.Columns>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding SelectedItemsCommand}" 
                                    CommandParameter="{Binding Path=SelectedItems,ElementName=ContactsDataGrid}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</DataGrid>

上記のEventTriggerは、DataGridのSelectedItemsをViewModelと同期するものです。

ViewModelの追加:

// A list to store the selected contacts in
private List<Contact> _selectedContacts = new List<Contact>();

// A DelegateCommand that will be invokes when selections change in the DataGrid
public DelegateCommand<object> SelectedItemsCommand { get; set; }

ctorで、またはコマンドをバインドする他の場所で、次を追加します。

SelectedItemsCommand = new DelegateCommand<object>(SelectContacts);

DelegateCommandが呼び出すSelectContactsメソッド:

private void SelectContacts(object contacts)
{
    var selected_contacts = contacts as System.Collections.IList;
    if (selected_contacts != null)
    {
        _selectedContacts.Clear();
        foreach (var contact in selected_contacts)
        {
            _selectedContacts.Add((Contact)contact);
        }
    }
}

これ_selectedContactsで、ビューで選択されたすべてのアイテムを含むプライベートコレクションがViewModelSelectionChangedにあり、ビューのDataGridからイベントが発生すると更新されます。

あなたがする必要があることでそれをしてください。頑張ってください!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

viewModelプロパティをMvvmCrossのビュープロパティにバインドする

分類Dev

ビューモデルからListViewアイテムタッププロパティにバインドする

分類Dev

Prismを使用して、viewmodelプロパティをコードビハインドのビュープロパティにバインドする

分類Dev

ビューモデルのXmlDataProviderプロパティをビュー内のXmlDataProviderにバインドするにはどうすればよいですか?

分類Dev

ビューモデルからXAMLの依存関係プロパティにFunc <T、T、T>をバインドする方法は?

分類Dev

異なるビューモデルのプロパティを相互にバインドする

分類Dev

他のプロジェクトビューモデル(UWP)のバインディングプロパティをどのように更新しますか?

分類Dev

カスタムクラスのプロパティをビューにバインドする

分類Dev

Canvasの添付プロパティを更新すると、バインドされたビューモデルのプロパティも更新できますか?

分類Dev

この状況または他のより良い方法で、モデルプロパティをビューのプログレスバー値にバインドする必要がありますか?

分類Dev

文字列プロパティをビューのラジオボタンにバインドするにはどうすればよいですか?

分類Dev

ユーザーコントロールのプロパティをMainViewModelにバインドし、そのデータコンテキストを独自のビューモデルにバインドするにはどうすればよいですか?

分類Dev

javafx:プロパティをバインドしてテーブルビューに表示する

分類Dev

コードビハインドからクラスのプロパティにバインドするにはどうすればよいですか?

分類Dev

リソースからの画像を使用して、画像をwpfのプロパティにバインドする

分類Dev

プロパティを他の要素の可視性にバインドする

分類Dev

コードビハインドから変換プロパティのバインディングを取得する

分類Dev

コマンドラインからbuild.gradleのプロパティをオーバーライドする

分類Dev

コードビハインド定義プロパティをXAMLのDataContextプロパティにバインドしますか?

分類Dev

ユニバーサルアプリ:ListViewItem(コンテナー)のプロパティを実際のアイテム(ビューモデル)にバインドするにはどうすればよいですか?

分類Dev

ビューのビューモデルの読み取り専用プロパティからデータをバインドできません

分類Dev

Android:ビューのEnabledプロパティをtrueからfalseに変更するアニメーション

分類Dev

VisualStateGroupの現在の状態をUWPMVVMアプリのビューモデルのプロパティにバインドする

分類Dev

DateTimeプロパティをビューモデルにバインドするにはどうすればよいですか?

分類Dev

ASP.NETCoreのプロパティバインディングプロパティ値をビューモデルにバインドしない

分類Dev

マスターページのコントロールプロパティをコードビハインドから変更した後に発行する

分類Dev

メインウィンドウのリソースプロパティからコンボボックスをitemsourceにバインドする

分類Dev

ユーザーコントロールのビューモデルのプロパティを別のユーザーコントロールのプロパティにバインドする方法

分類Dev

プロパティをサービスからコンポーネントにバインドするAngular4

Related 関連記事

  1. 1

    viewModelプロパティをMvvmCrossのビュープロパティにバインドする

  2. 2

    ビューモデルからListViewアイテムタッププロパティにバインドする

  3. 3

    Prismを使用して、viewmodelプロパティをコードビハインドのビュープロパティにバインドする

  4. 4

    ビューモデルのXmlDataProviderプロパティをビュー内のXmlDataProviderにバインドするにはどうすればよいですか?

  5. 5

    ビューモデルからXAMLの依存関係プロパティにFunc <T、T、T>をバインドする方法は?

  6. 6

    異なるビューモデルのプロパティを相互にバインドする

  7. 7

    他のプロジェクトビューモデル(UWP)のバインディングプロパティをどのように更新しますか?

  8. 8

    カスタムクラスのプロパティをビューにバインドする

  9. 9

    Canvasの添付プロパティを更新すると、バインドされたビューモデルのプロパティも更新できますか?

  10. 10

    この状況または他のより良い方法で、モデルプロパティをビューのプログレスバー値にバインドする必要がありますか?

  11. 11

    文字列プロパティをビューのラジオボタンにバインドするにはどうすればよいですか?

  12. 12

    ユーザーコントロールのプロパティをMainViewModelにバインドし、そのデータコンテキストを独自のビューモデルにバインドするにはどうすればよいですか?

  13. 13

    javafx:プロパティをバインドしてテーブルビューに表示する

  14. 14

    コードビハインドからクラスのプロパティにバインドするにはどうすればよいですか?

  15. 15

    リソースからの画像を使用して、画像をwpfのプロパティにバインドする

  16. 16

    プロパティを他の要素の可視性にバインドする

  17. 17

    コードビハインドから変換プロパティのバインディングを取得する

  18. 18

    コマンドラインからbuild.gradleのプロパティをオーバーライドする

  19. 19

    コードビハインド定義プロパティをXAMLのDataContextプロパティにバインドしますか?

  20. 20

    ユニバーサルアプリ:ListViewItem(コンテナー)のプロパティを実際のアイテム(ビューモデル)にバインドするにはどうすればよいですか?

  21. 21

    ビューのビューモデルの読み取り専用プロパティからデータをバインドできません

  22. 22

    Android:ビューのEnabledプロパティをtrueからfalseに変更するアニメーション

  23. 23

    VisualStateGroupの現在の状態をUWPMVVMアプリのビューモデルのプロパティにバインドする

  24. 24

    DateTimeプロパティをビューモデルにバインドするにはどうすればよいですか?

  25. 25

    ASP.NETCoreのプロパティバインディングプロパティ値をビューモデルにバインドしない

  26. 26

    マスターページのコントロールプロパティをコードビハインドから変更した後に発行する

  27. 27

    メインウィンドウのリソースプロパティからコンボボックスをitemsourceにバインドする

  28. 28

    ユーザーコントロールのビューモデルのプロパティを別のユーザーコントロールのプロパティにバインドする方法

  29. 29

    プロパティをサービスからコンポーネントにバインドするAngular4

ホットタグ

アーカイブ