WPF ComboBox绑定到List <string>

时间:2017-01-06 18:45:42

标签: c# wpf mvvm combobox

我正在尝试用列表填充wpf组合框。我有两个问题。

  1. 它没有填充任何内容
  2. 我正在使用Data Annotation进行验证。它没有在错误显示区域中设置“必需”错误消息。
  3. 这是我对组合框的XAML:

    <Label Target="{Binding ElementName=State}" Grid.Row="10" Grid.Column="0">State:</Label>
            <ComboBox x:Name="State" Margin="10,0,0,10" Grid.Column="1" Grid.Row="10" ItemsSource="{Binding Path=States, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnDataErrors=True}"  Validation.Error="Validation_Error" SelectedValue="{Binding Path=FamilyMember.State}"/>   
            <TextBlock Grid.Column="2" Grid.Row="10" Style="{StaticResource TextBlockStyle}" Text="{Binding (Validation.Errors)[0].ErrorContent, ElementName=State}" Margin="10,0,0,10"/>
    

    这是我的部分视图模型,我在其中声明并填充我的States对象。

    ViewModel中的属性

    public ObservableCollection<string> States;
    

    构造

    States = new ObservableCollection<string>();
                States.Add("One");
                States.Add("Two");
                States.Add("Three");
                States.Add("Four");
                States.Add("Five");
    

    以下是我的调试证明我正确地将状态转换为视图。 enter image description here

    另一个问题是我的数据注释错误无效 这是我的部分模型: enter image description here

    它适用于其他领域,没有任何问题,如下所示:

    enter image description here

2 个答案:

答案 0 :(得分:5)

更改此字段:

public ObservableCollection<string> States;

属性:

public ObservableCollection<string> States {get; set;}

绑定对字段不起作用,即使它们是公开的。

答案 1 :(得分:-1)

在视图模型中将States更改为完整属性,并在xaml文件的组合框中添加显示成员路径。

查看型号:

public ObservableCollection<string> _state = new ObservableCollection<string>();
public ObservableCollection<string> States 
{
 get{return _state;}
set {_state = value; OnPropertyChange("States");}
}

如果您需要更多说明,请参阅此页面:  https://www.codeproject.com/Articles/301678/Step-by-Step-WPF-Data-Binding-with-Comboboxes