请参阅下面的我的CustomView窗口
当我从组合框中选择项目时,与该项目关联的客户端应该自动显示在那里。
在Combobox的选择改变事件中,我做到目前为止
private string client
{
get
{
return ClientText.Text;
}
set
{
ClientText.Text = value;
}
}
public Harvest_Project projectClass
{
set
{
ProjectText.Text = value.ToString();
Harvest_Project proj = (Harvest_Project)ProjectText.Text; // shows error here. casting is not possible. What can I do here?
this.client = Globals._globalController.harvestManager.getClientEntriesThroughId(proj._client_id)._name;
PropertyChanged(this, new PropertyChangedEventArgs("client"));
}
}
public int project
{
get
{
return int.Parse(ProjectText.Text);
}
set
{
ProjectText.Text = value.ToString();
}
}
private void ProjectComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
if (sender is ComboBoxItem)
{
ComboBoxItem item = (ComboBoxItem)sender;
}
}
在xaml中,我使用了这样的绑定,
<ComboBox x:Name="ProjectText" SelectionChanged="ProjectComboBoxChanged" ItemsSource="{Binding Path=projectList}" SelectedValuePath="_id" DisplayMemberPath="_name" SelectedItem="{Binding ProjectComboBoxChanged, Mode=OneWayToSource}" Background="Yellow" BorderThickness="0" Width="66"/>
答案 0 :(得分:0)
在您的事件处理程序ProjectComboBoxChanged(object sender, SelectionChangedEventArgs e)
中,发件人的类型为ComboBox
而非ComboBoxItem
,因此您的if
语句始终为false。
e.AddedItems[0]
会为您提供所需的ComboBoxItem
。确保先检查计数。
此外,如果您只想设置Text
,则无需拥有client
属性。
答案 1 :(得分:0)
“客户”是一个属性,它应该是公共的。 然后应该在setter中引发PropertyChanged,因此每当你更改客户端时,UI都会知道。
关于组合,SelectedItem应绑定到属性,而不是方法。该财产可能是“客户”,但另一个财产可能更清楚。
在此属性的setter中,您可以自由修复“client”属性的新值。
最后,既然你正在使用selectedItem的绑定,我认为没有理由使用事件selectionChanged。使用绑定或事件,而不是两者。
希望它有所帮助;)