我不清楚如何連接反映ListViewItem的綁定上下文的實體。使用POCO實現INotifyPropertyChanged
XAML:
<ListView x:Name="AssignedMaterialsList" Grid.Row="7" Grid.ColumnSpan="2" ItemsSource="{Binding AssignedMaterials}" SelectedItem="{Binding SelectedAssignedMaterial}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Text="{Binding Quantity, StringFormat='({0:F0})'}" />
<Label Grid.Row="0" Grid.Column="1" Text="{Binding Name}" />
<Label Grid.Row="0" Grid.Column="2" Text="{Binding ., Converter={StaticResource MaterialToCostConverter}, StringFormat='{}{0:c}'}}" />
<Label Grid.Row="1" Grid.Column="0" Text="{Binding Description}" />
</Grid>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
POCO:
public class Material : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
decimal _quantity = 0.0m;
public decimal Quantity
{
get { return _quantity; }
set
{
if (_quantity != value)
{
_quantity = value;
OnPropertyChanged();
}
}
}
void OnPropertyChanged([CallerMemberName] string propertyName = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
怎樣的的PropertyChanged事件得到初始化?因此,僅僅讓類實現INotifyPropertyChanged是不夠的。當視圖被實例化時,將視圖模型耦合到視圖時,PropertyChanged事件通常會被初始化。
在我的情況下,我需要更新這個實體的任何屬性。但是,它沒有連接到任何綁定系統。
bleh,這些「表達式」的方法定義很難看:) – Liero
您的視圖是直接綁定到您的POCO還是VM?如果它是一個VM,VM和POCO之間的關係是什麼?我認爲你需要展示更多的代碼,以便了解你的綁定是如何設置的。 – Jason
我的視圖直接綁定到虛擬機。虛擬機有一個可觀察的poco集合,我需要我的視圖來反映基於poco中屬性值更改的更新。 –