-1

我正在combobox使用MVVM模式将 Observable 集合绑定到comboboxaSelectedItem我想象它的方式是,必须有某种方法来创建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

当然,ComboBox有财产SelectedItem。您可以在视图模型中公开属性并在 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 回答