2012-01-23 23 views
0

私はMVVMを使用して、ComboBoxを自分のWPFアプリケーションのObservableCollectionにバインドしています。 しかし、私はこのコンボボックスで1つ以上の項目を "選択不可"にする必要があります。 私はまた、コンボボックスがDataGridで使用されていることを言及する必要があります。ComboBoxの読み取り専用アイテム

私はある種類のValueConverterを使うことができると思います。しかし、私はどのように把握することはできません。

現在のXAML:

<DataGridTemplateColumn Width="Auto"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Type.Name}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <StackPanel DataContext="{Binding DataContext.CurrentListUser, 
               RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"> 
       <ComboBox ItemsSource="{Binding Types}" 
          DisplayMemberPath="Name" 
          SelectedValue="{Binding TypeId, 
              Mode=TwoWay, 
              UpdateSourceTrigger=PropertyChanged}" 
          SelectedValuePath="Id" /> 
      </StackPanel> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 
+1

どの項目を読み込み専用にするかはどのように決定されますか? –

+0

「読み取り専用」と「選択不可」は私にとって2つの異なるものです。あなたは何を望みますか? – blindmeis

答えて

1

あなたは専用のビューモデルクラスでコンボボックスにバインドしてデータオブジェクトをラップすることができます。 IsReadOnlyのようなモデルクラスのブール値プロパティを表示し、IsReadOnlyプロパティの値に応じて適切に動作します。例:

public class Artist 
{ 
    public string Name { get; set; } 
} 

public class ArtistViewModel 
{ 
    private Artist artist; 

    public ArtistViewModel(Artist artist) 
    { 
     this.artist = artist; 
    } 

    public bool IsReadOnly { get; set; } 

    public string Name 
    { 
     get { return artist.Name; } 
     set 
      { 
       if (IsReadOnly) 
       { 
        throw new InvalidaOpertationException(); 
       } 
       artist.Name = value; 
      } 
    } 
} 

public class MainViewModel 
{ 
    public ObservableCollection<ArtistViewModel> Artists { get; private set; } 
} 

個々のArtistViewModelオブジェクトに対してIsReadOnlyプロパティを設定できます。 ComboBoxは、MainViewModelのArtistsプロパティにバインドされています。 簡潔さのため、VMクラスのINotifyPropertyChangedの実装は省略しました。

+0

ああ。私の間違い。私のポストは少し速く書かれた。私が実際にやりたいことは、アイテムを「選択不可」にすることです。私はそれが完全に異なっていることを知っている。元の投稿を更新しました。 –

+0

私はそれを理解しました!私は、IsReadOnlyプロパティにバインドされたトリガーでComboboxItemのスタイルを作成しました。このトリガを使用してアイテムのIsEnabledプロパティを設定します... –

関連する問題