-1

comboboxパターンを使用して、Observable コレクションを にMVVMバインドしています。正常にバインドできますcomboboxが、現在、ビュー モデルでプロパティを取得する方法を探していSelectedItemます (パターンにブレーキがかかるため、単純に呼び出すことはできません)。私がそれを描く方法はXAML、選択したアイテムを指し、後でビューモデルで使用できるバインディングを作成する方法がなければならないということです。

これを達成する方法について何か提案はありますか?

XAML

<ComboBox SelectedIndex="0" DisplayMemberPath="Text" ItemsSource="{Binding Path=DocumentTypeCmb,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
          Grid.Column="1" Grid.Row="4" Margin="0,4,5,5" Height="23"
          HorizontalAlignment="Left" Name="cmbDocumentType" VerticalAlignment="Bottom"
          Width="230" />

コード

//Obesrvable collection property
private ObservableCollection<ListHelper> documentTypeCollection = new ObservableCollection<ListHelper>();
public ObservableCollection<ListHelper> DocumentTypeCmb
{
    get
    {
        return documentTypeCollection;
    }
    set
    {
        documentTypeCollection = value;
        OnPropertyChanged("DocumentTypeCmb");
    }
}

//Extract from the method where i do the binding
documentTypeCollection.Add(new ListHelper { Text = "Item1", IsChecked = false });
documentTypeCollection.Add(new ListHelper { Text = "Item2", IsChecked = false });
documentTypeCollection.Add(new ListHelper { Text = "Item3", IsChecked = false });

DocumentTypeCmb = documentTypeCollection; 

//Helper class
public class ListHelper
{
    public string Text { get; set; }
    public bool IsChecked { get; set; }
}
4

3 に答える 3

8

これを試して:

public ListHelper MySelectedItem { get; set; }

そしてXAML:

<ComboBox ItemsSource="{Binding Path=DocumentTypeCmb,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
      SelectedItem={Binding MySelectedItem}
      />

正しいタイプを取得/設定するパブリックプロパティをViewModelに含める必要があります。次に、バインディングを使用して、選択したアイテムをそれに割り当てます。SelectedItemは依存関係プロパティであるため、このようにバインドできますが、リストコントロールのSelectedItems(複数形に注意)は依存関係プロパティではないため、VMにバインドすることはできません。これには簡単な回避策があります。代わりに動作。

また、この例ではプロパティ変更通知を実装していないため、VMから選択したアイテムを変更しても、UIでは更新されませんが、これを入力するのは簡単です。

于 2012-05-04T13:35:57.617 に答える
4

確かにComboBoxSelectedItemプロパティがあります。ビューモデルでプロパティを公開し、XAMLで双方向バインディングを作成できます。

public ListHelper SelectedDocumentType
 {
    get { return _selectedDocumenType; }
    set 
    {
        _selectedDocumentType = value;
        // raise property change notification
    }
}
private ListHelper _selectedDocumentType;

…</p>

<ComboBox ItemsSource="{Binding DocumentTypeCmb, Mode=TwoWay}"
          SelectedItem="{Binding SelectedDocumentType, Mode=TwoWay}" />
于 2012-05-04T13:37:12.363 に答える
1

これはどう?

SelectedItem={Binding SelectedDocumentType}
于 2012-05-04T13:36:38.697 に答える