2016-08-03 8 views
1

スクリーンショット:リストビュー上から項目を選択表示特性

enter image description here

以下のデータグリッドにおけるそれらの特性を示します。

XAML:

<Window x:Class="EmployeeSystem.Run_with_XML" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:EmployeeSystem" 
     mc:Ignorable="d" 
     Title="Run with XML" Height="398.299" Width="305.91" WindowStartupLocation="CenterScreen" ResizeMode="NoResize"> 
    <Grid Height="325" VerticalAlignment="Top"> 
     <StackPanel> 
      <ListView Height="100" DisplayMemberPath="Name" ItemsSource="{Binding employees}" SelectedItem="{Binding SelectedEmployee}"/> 
      <DataGrid Height="100" ItemsSource="{Binding EmployeesView}"/> 
     </StackPanel> 

     <Button x:Name="button" Content="Create New" Height="24" Margin="112,0,111,-30" VerticalAlignment="Bottom"/> 
    </Grid> 
</Window> 

がVeiwModel:

class ViewModel 
{ 
    private Employee selectedEmployee; 
    public ICollectionView EmployeesView { get; set; } 

    EmployeeManagerXML emx = new EmployeeManagerXML(); 

    public ViewModel() 
    { 
     EmployeesView = new ListCollectionView(emx.getEmployeesList()) //this is an ObservableCollection 
     { 
      Filter = obj => 
      { 
       var Employee = (Employee)obj; 

       return SelectedEmployee != null && Employee.Name == SelectedEmployee.Name; 
      } 
     }; 
    } 

    public Employee SelectedEmployee 
    { 
     get { return selectedEmployee; } 
     set 
     { 
      if (selectedEmployee != value) 
      { 
       selectedEmployee = value; 
       EmployeesView.Refresh(); 
      } 
     } 
    } 
} 

私は必死に今日のためにこれを達成しようとしている...私は時間のためにグーグルを検索...すべて試してみましたstackoverflowの関連ページ...この投稿は私の最後の希望です...誰かがちょうど私にこれで間違っていると私を見せてください。私はすでにこれが重複していることを知っています.. Thisシナリオはまさに私のものと同じですが、私はまったく同じことをしました。

+0

出力ウィンドウにバインドエラーがありますか? – Pravin

+0

出力ウィンドウにエラーがありません –

+0

ListViewのItemSourceはEmployeesプロパティにバインドされますが、ViewModelのそのプロパティはどこですか? – Pravin

答えて

1

あなたは

public class ViewModel: INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public void NotifyPropertyChanged([CallerMemberName] string propertyName = "") 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    EmployeeManagerXML emx = new EmployeeManagerXML(); 

    public ViewModel() 
    { 

    } 
    private Void RefreshEmployeeList() 
    { 
     EmployeesView = new ListCollectionView(emx.getEmployeesList()) //this is an ObservableCollection 
    { 
     Filter = obj => 
     { 
      var Employee = (Employee)obj; 

      return SelectedEmployee != null && Employee.Name == SelectedEmployee.Name; 
     } 
    }; 
    } 
    private Employee selectedEmployee; 
    private ICollectionView _EmployeesView; 
    public ICollectionView EmployeesView 
    { 
     get { return _EmployeesView; } 
     set 
     { 
      _EmployeesView = value; 
      NotifyPropertyChanged(); 
     } 
    } 
    public Employee SelectedEmployee 
    { 
    get { return selectedEmployee; } 
    set 
    { 
     if (selectedEmployee != value) 
     { 
      selectedEmployee = value;     
      NotifyPropertyChanged(); 
      RefreshEmployeeList(); 
     } 
    } 
} 

、以下の例を見る

の変更を反映するためにINotifyPropertyChangedインタフェースをimplimentすべきMSDN

INotifyPropertyChangedインタフェースは、通常のクライアントを結合、クライアントに通知するために使用されますプロパティ値が変更されたことを示します。

+0

が、のObservableCollection <>は '[SerializableAttribute] パブリッククラスのObservableCollection ...のために何であることをイマイチ:コレクション、INotifyCollectionChanged、 \t INotifyPropertyChanged' –

+0

'ICollectionView'の代わりに' ObservableCollection'を使うことができます。[this](https://msdn.microsoft.com/en-us/library/ms668604(v=vs.110).aspx) –

関連する問題