3

プロジェクトにUserControl(AllCustomerView)があり、ALlCustomerViewModelとしてのViewmodelはSearchTextとしてのプロパティで構成されています。SearchTextは、UserControlのリストビュー内のTextBoxの選択された値です。SearchItemは、SearchTextのcustomerViewmdelとして設定されます。ただし、リストビューでは、SearchItemが選択済みとして設定されていません

AllCustomerView.xamlで

<TextBlock>
<TextBox 
        Width="150" 
        Text="{Binding Path=SearchText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
</TextBox>
<Button 
         Command="{Binding Path=SearchCommand}"
         Content=" Search ">
</Button>
</TextBlock>

<ListView
            SelectedValue="{Binding Path=SearchText}"
            ItemsSource="{Binding Path=AllCustomers}"
            FontFamily="Tahoma"
            FontSize="14"
            ItemContainerStyle="{StaticResource CustomerItemStyle}" 
            IsSynchronizedWithCurrentItem="True">
            <ListView.View>
                <GridView>
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Button 
                                    Command="{Binding ElementName=Root, Path=DataContext.DeleteCommand}"
                                    Content="x"
                                    FontFamily="Tahoma"
                                    FontSize="10"
                                    />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Button 
                                     FontFamily="Tahoma"
                                    FontSize="10"
                                    Content="Edit"
                                    Command="{Binding Path=DataContext.Editcommand,ElementName=Root}"
                                    />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn
                        Header="CustomerID"
                        Width="130"
                        DisplayMemberBinding="{Binding Path=CustomerID}"/>
                    <GridViewColumn
                        Header="Contact Name"
                        Width="130"
                        DisplayMemberBinding="{Binding Path=ContactName}"/>
                    <GridViewColumn
                        Header="Company Name"
                        Width="130"
                        DisplayMemberBinding="{Binding Path=CompanyName}"/>
                    <GridViewColumn
                        Width="130"
                        Header="Contact Name"
                        DisplayMemberBinding="{Binding Path=ContactTitle}"
                        />
                </GridView>
            </ListView.View>
        </ListView>

およびそのviewmodel(AllcustomerViewModel.cs)

public ICommand SearchCommand
        {
            get
            {
                if (_search == null)
                    _search = new Relaycommand(SearchCustomer);
                return _search;
            }
        }

 public void SearchCustomer(object o)
 {
            System.Windows.Forms.MessageBox.Show(SearchItem.ToString());

}

 public string searchText;
 public string SearchText
 {
     get { return searchText; }
     set 
     {
       searchText = value;
       var customerExsits = AllCustomers.Where(q => q.CustomerID.Trim().Equals(searchText));
        if (customerExsits.Any())
                {
                    SearchItem = customerExsits.Single();
                }

            }
        }

public CustomerViewModel SearchItem
{
            get;
            set;
}

Customerviewmodel(SelectedItemとして)を設定するか、CustomerID(SearchTextとして)を設定するかにかかわらず、ListViewのSelectedValueに何を設定する必要がありますか?

4

1 に答える 1

2

次のことを行う必要があります。

  1. ListView:でこのバインディングを使用しますSelectedItem="{Binding Path=SearchItem }"。使用しないでくださいSelectedValue
  2. INotifyPropertyChangedViewModelに実装しPropertyChanged、プロパティのセッターでイベントを発生させSearchItemます。明らかに、このプロパティを自動プロパティからバッキングフィールドのある従来のプロパティに変更する必要があります。

    public CustomerViewModel SearchItem
    {
        get { return _searchItem; }
        set
        {
            if(value == _searchItem)
                return;
            _searchItem = value;
            RaisePropertyChanged("SearchItem");
        }
    }
    
于 2012-08-16T06:41:06.353 に答える