我是C#的新手,我正在尝试使用MVVM模式创建代码,但我不知道如何使用该模式填充组合框。请帮我创建ViewModel和绑定到xaml。
代码模型:
public int Cd_Raca
{
get;
set
{
if(Cd_Raca != value)
{
Cd_Raca = value;
RaisePropertyChanged("Cd_Raca");
}
}
}
public string Nm_Raca
{
get;
set
{
if(Nm_Raca != value)
{
Nm_Raca = value;
RaisePropertyChanged("Nm_Raca");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string property)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
的Xaml:
<ComboBox x:Name="dsCmbRaca" HorizontalAlignment="Left" Margin="438,4,0,0"
VerticalAlignment="Top" Width="94" Height="19"/>
答案 0 :(得分:0)
使用ItemsSource属性并将其设置为对象的枚举。使用DisplayMemberPath,如果列表不仅仅是字符串列表,您可以将其设置为列表中单个对象的属性。
即在我的示例中,列表的对象具有用于显示的Description属性和用于所选值的Value属性。
示例中的所有绑定都必须是ViewModel(= DataContext)中的属性。
<ComboBox DisplayMemberPath="Description" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="120"
ItemsSource="{Binding myList}"
SelectedValue="{Binding mySelectedValue}" SelectedValuePath="Value" />
编辑:
List属性可能如下所示:
public IList<MyObject> myList { get { return new List<MyObject>();} }
对象可能看起来像这样:
public class MyObject
{
public string Description { get; }
public enum Value { get;}
}
对象是可选的。你可以传递一个字符串列表。
免责声明:我在记事本中攻击了这个。我希望它可以编译。
<强>更新强>
至少根据您发布的属性查看代码未正确实现。如果您按照以下方式对其进行编码,则需要一个支持字段:
private int _cd_Raca;
private string _nm_Raca;
public int Cd_Raca
{
get{ return _cd_Raca;}
set
{
if(_cd_Raca != value)
{
_cd_Raca = value;
RaisePropertyChanged("Cd_Raca");
}
}
}
public string Nm_Raca
{
get{return _nm_Raca;}
set
{
if(_nm_Raca != value)
{
_nm_Raca = value;
RaisePropertyChanged("Nm_Raca");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string property)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
在第一个答案中阅读您的评论似乎您可能有一个特定的用例。因此,如果此更新无效,您可以在问题中添加更多信息。