0

请参阅下面的 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"/>
4

2 回答 2

0

“客户”是一个属性,它应该是公共的。然后 PropertyChanged 应该在 setter 中引发,所以无论何时您更改客户端,UI 都会知道。

关于组合,SelectedItem 应该绑定到属性,而不是方法。该属性可以是“客户”,但另一个属性可能更清晰。

在此属性的设置器中,您可以自由修改“客户端”属性的新值。

最后,由于您使用的是 selectedItem 绑定,我认为没有理由使用事件 selectionChanged。使用绑定或事件,而不是两者。

希望能帮助到你 ;)

于 2013-07-12T10:06:27.447 回答
0

在您的事件处理程序ProjectComboBoxChanged(object sender, SelectionChangedEventArgs e)中, sender 是 typeComboBox而不是ComboBoxItem,因此您的if陈述总是错误的。

e.AddedItems[0]会给你你想要的ComboBoxItem。确保首先检查计数。

此外,如果您只想设置Text,则不需要该client属性。

于 2013-07-12T10:05:08.570 回答