私はWPFを初めて使用しており、時間を節約するための簡単なツールを構築するための基本的なことを学びたいと考えています。ここでは、リモートファイルを読み込んでステータスを取得し、マシンの名前とファイルのステータスでDataGridを更新しようとしています。WPF - ObserableCollectionsを使用してDataGridの新しい行の代わりに既存のROW値を更新する
以下は、CSコードです:
public partial class MainWindow : Window
{
private ObservableCollection<User> users = new ObservableCollection<User>();
public MainWindow()
{
InitializeComponent();
lbUsers.ItemsSource = users;
}
private void btnCheckStatus_Click(object sender, RoutedEventArgs e)
{
var fileStream_status = new FileStream(@"\\LBSTR\c$\temp\range.dat", FileMode.Open, FileAccess.Read);
using (var streamReader = new StreamReader(fileStream_status, Encoding.UTF8))
{
string line;
while ((line = streamReader.ReadLine()) != null)
{
if (line.Equals("A"))
{
users.Add(new User() { MachineName = "LBSTR", Status = "Close" });
}
else if (line.Contains("B"))
{
users.Add(new User() { MachineName = "LBSTR", Status = "Open" });
}
}
}
}
}
public class User
{
public string MachineName {set;get;}
public string Status {set;get;}
}
XAML:私はチェックステータスをクリックすることで、初めてを実行すると
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DockPanel Margin="10">
<StackPanel DockPanel.Dock="Right" Margin="10,0,0,0">
<Button Name="btnCheckStatus" Click="btnCheckStatus_Click">Check Status</Button>
</StackPanel>
<DataGrid Name="lbUsers" ></DataGrid>
</DockPanel>
</Grid>
、行は、マシン名を追加取得して、ファイルの状態 For a first click
2回目に同じボタンをクリックすると、同じマシンに対して新しい行が追加されます。
この方法は私がリモートマシンにあるファイルのステータスをチェックするたびに新しい行を作成しているので、私はちょうど私が対応するマシン名に一人でステータスを更新することができます方法を知りたい。?ソリューションの特定に役立つ方法やオンラインの記事があれば教えてください。だから、
を?既存の行を見つけて更新するためにコード内に何も表示されません。毎回Addを呼び出すだけです。 –
あなたはあなたの質問にすでに何をする必要があるのかを記述しています。更新しようとしているアイテムが存在する場合はObservableCollectionで見つけてください。存在する場合はそのアイテムのステータスを変更してください。今はそれをコーディングすることです。したがって、 'users.Add()'の代わりに、 'users'が問題の項目を持っているかどうか最初にチェックし、そうであればリストに追加するのではなく単に更新してください。 – Sach