我正在使用MVVM将ComboBox绑定到我的WPF应用程序中的ObservableCollection。 但是,我需要在这个组合框中制作一个或多个项目“不可选择”。 我还要提一下,组合框用在DataGrid中。
我想,我可以使用某种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>
答案 0 :(得分: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; }
}
在MainViewModel中,您可以为各个ArtistViewModel对象设置IsReadOnly属性。 ComboBox绑定到MainViewModel的Artists属性。 为简洁起见,我省略了VM类的INotifyPropertyChanged的实现。