2017-02-14 12 views
0

私のリストビューに値が含まれているかどうかを知る方法を探しています。以下は私のコードです。gridviewとWPFでリストビューの項目を検索

public class OnlineUserList 
{ 
    public string Name { get; set; } 
    public string Color { get; set; } 
} 

<ListView x:Name="lvOnlineUsers" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SelectionMode="Single" SelectionChanged="lvOnlineUsers_SelectionChanged"> 
      <ListView.View> 
       <GridView x:Name="lvOnlineUsersGridView" AllowsColumnReorder="False"> 
        <GridViewColumn Header="Online Users" Block.TextAlignment="Center" TextOptions.TextFormattingMode="Display" TextBlock.FontWeight="Bold"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Name="tbOnlineUsersGridView" Text="{Binding Path=Name}" Foreground="{Binding Path=Color}" HorizontalAlignment="Center" VerticalAlignment="Center" TextOptions.TextFormattingMode="Display" Style="{StaticResource ResourceKey=lblLabel}" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
     </ListView> 

public void AddUserToList(string username) 
{ 
    lvOnlineUsers.Items.Add(new OnlineUserList { Name = username, Color = "Black" }); 
} 

さて、これは問題

public void RemoveUserFromList(string username) 
{ 
    if(lvOnlineUsers.Items.Contains(username)) 
     lvOnlineUsers.Items.Remove(username); 
} 

答えて

1

を持っていますどこにMVVMを学ぶべきです。

一方、アイテムをObservableCollectionに配置し、それをコードビハインドのlistviewのItemsSourceプロパティに割り当てます。その後、私の後に繰り返し:決して、決してlvOnlineUsers.Itemsに触れなさい。決して、決して、決して。それが存在することを忘れてください。あなたがするすべてのものは、ObservableCollectionと対話します。それを検索し、項目を追加し、そこから項目を削除します。 UIは魔法のように不思議に更新されます。

私はこれがMainWindowであると仮定します。これが異なるビューにある場合、コンストラクターは異なる名前を持ちます。

public MainWindow() 
{ 
    InitializeComponent(); 

    lvOnlineUsers.ItemsSource = _onlineUsers; 
} 

private ObservableCollection<OnlineUserList> _onlineUsers 
    = new ObservableCollection<OnlineUserList>(); 

public void AddUserToList(string username) 
{ 
    _onlineUsers.Add(new OnlineUserList { Name = username, Color = "Black" }); 
} 


public void RemoveUserFromList(string username) 
{ 
    // We don't search _onlineUsers for the string username, because 
    // _onlineUsers doesn't contain strings. It contains your user class. 
    // So instead, we look for the user class instance that has the name 
    // we want. 
    var found = _onlineUsers.FirstOrDefault(ou => ou.Name == username); 

    if (found != null) 
    { 
     _onlineUsers.Remove(found); 
    } 
} 
+0

おかげでエド、私は、あなたは天才です、あなたのコード –

+1

エドになります。それは期待どおりに動作します。私はこれを答えにしています。百万回ありがとう –

0

あなたはMVVMに見ているまでは、これを試してみてください。

for(int i = lvOnlineUsers.Items.Count - 1; i >= 0; --i) 
{ 
    OnlineUserList item = lvOnlineUsers.Items[i] as OnlineUserList; 
    if (item != null && item.Name == username) 
     lvOnlineUsers.Items.Remove(lvOnlineUsers.Items[i]); 
} 
関連する問題