0

以下の CustomView ウィンドウを参照してください

ここに画像の説明を入力

コンボボックスからプロジェクトを選択すると、そのプロジェクトに関連付けられたクライアントが自動的にそこに表示されます。

コンボボックスの選択変更イベントで、ここまでやった

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

イベント ハンドラーProjectComboBoxChanged(object sender, SelectionChangedEventArgs e)では、送信者のタイプはComboBoxnotComboBoxItemであるため、ifステートメントは常に false です。

e.AddedItems[0]あなたの希望を与えますComboBoxItem。最初にカウントを確認してください。

また、 を設定するだけであれば、プロパティTextは必要ありません。client

于 2013-07-12T10:05:08.570 に答える
0

「クライアント」はプロパティであり、公開する必要があります。次に、PropertyChanged をセッターで発生させる必要があるため、クライアントを変更するたびに UI が認識します。

コンボについては、SelectedItem はメソッドではなくプロパティにバインドする必要があります。プロパティは「クライアント」である可能性がありますが、別のプロパティの方が明確な場合があります。

このプロパティのセッターでは、「クライアント」プロパティの新しい値を自由に修正できます。

そして最後に、selectedItem のバインドを使用しているため、selectionChanged イベントを使用する理由はありません。両方ではなく、バインディングまたはイベントを使用してください。

それが役に立てば幸い ;)

于 2013-07-12T10:06:27.447 に答える