這個問題在這里已經有了答案: ObservableCollection<> 與 List<> (5 個答案) 昨天關門。
真的需要你的幫助來動態更新表格。
這是與INotifyPropertyChanged資料“表”相關的表,下面將描述DataContext與mainVM相關。這樣,我試圖顯示在程式執行期間可能會更改的表格。
所以這是我的 xaml 部分:
<DataGrid DataContext="{Binding Table, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" Grid.Column="0" CanUserAddRows="false" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinHeight="500">
<!-- Column Header Text & Bindings -->
<DataGrid.Columns>
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="checkBox" IsThreeState="False" IsChecked="{Binding IsChecked}" CommandParameter="{Binding Index}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header=" Port" Binding="{Binding Port}" MinWidth="70"/>
<DataGridTextColumn Header=" Host" Binding="{Binding Host}" MinWidth="70"/>
<DataGridTextColumn Header=" IPv4" Binding="{Binding IPV4}" MinWidth="70"/>
<DataGridTextColumn Header=" IPv6" Binding="{Binding IPV6}" MinWidth="70"/>
...
</DataGrid.Columns>
</DataGrid>
這就是 ViewModel 代碼(省略號表示對類欄位的描述有一些遺漏):
public class RowVM : ObservableObject
{
private string _port;
private string _host;
private string _ipv4;
private string _ipv6;
...
public string Port
{
get { return _port; }
set
{
_port = value;
OnPropertyChanged("Port");
}
}
...
}
public class MainViewModel : ObservableObject
{
public List<RowVM> Table { get; set; }
public MainViewModel()
{
Table = new List<RowVM>();
}
}
所以似乎一切都聯系在一起了。但我畢竟看不到表中的專案:(也沒有例外。
這是我的開始身體:
public partial class MainWindow : Window
{
MainViewModel _mainVM = new MainViewModel();
public MainWindow()
{
InitializeComponent();
DataContext = _mainVM;
RowVM row1 = new RowVM() { SN = "001" };
RowVM row2 = new RowVM() { SN = "010" };
_mainVM.Table.Add(row1);
_mainVM.Table.Add(row2);
}
}
請告訴我,我做錯了什么?
PS INotifyPropertyChanged shell 的實作:
public class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
uj5u.com熱心網友回復:
您的視窗不知道何時添加或洗掉時間到您的Table. 而不是List<RowVM>,您應該使用ObservableCollection<RowVM>. 每當添加或洗掉專案時,它將呼叫一個事件。這允許 GUI 元素意識到它們必須自我更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408327.html
標籤:
