我使用combobox
模式将Observable集合绑定到MVVM
。我可以成功绑定到combobox
但现在我正在寻找获取SelectedItem
的方法{1}}我的视图模型中的属性(我不能简单地调用它,因为这会制动模式)我想象的方式是必须有一些方法在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; }
}
答案 0 :(得分:8)
试试这个:
public ListHelper MySelectedItem { get; set; }
和XAML:
<ComboBox ItemsSource="{Binding Path=DocumentTypeCmb,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
SelectedItem={Binding MySelectedItem}
/>
您只需要在ViewModel中拥有一个获取/设置正确类型的公共属性,然后使用绑定将所选项目分配给它。请注意,SelectedItem是一个依赖项proeprty,所以你可以这样绑定,但对于列表控件SelectedItems(注意复数)是不一个依赖属性,所以你不能将它绑定回你的VM - 为此有一个简单的解决方法来改为使用行为。
另请注意,我的示例中没有实现属性更改通知,因此如果您从VM更改所选项目,它将不会在UI中更新,但这很容易放入。
答案 1 :(得分:4)
当然,ComboBox
具有SelectedItem
属性。您可以在视图模型中公开属性,并在XAML中创建双向绑定。
public ListHelper SelectedDocumentType
{
get { return _selectedDocumenType; }
set
{
_selectedDocumentType = value;
// raise property change notification
}
}
private ListHelper _selectedDocumentType;
...
<ComboBox ItemsSource="{Binding DocumentTypeCmb, Mode=TwoWay}"
SelectedItem="{Binding SelectedDocumentType, Mode=TwoWay}" />
答案 2 :(得分:1)
这个怎么样?
SelectedItem={Binding SelectedDocumentType}