저는 WPF (1 주 반)를 처음 사용하고 있습니다. 가능한 한 많이 읽고 연습했으며, 연습 문제 중 하나에서 내가 경험하지 못한 문제가 발생했습니다.ItemsControl을 명시 적으로 업데이트하는 방법
나는 ObservableCollection에 대해 이미 알고 있지만 표시가 준비되기 전에 목록에 많은 변경 사항을 적용했기 때문에 사용할 수 없다는 사실을 알려 드리고자합니다. 바인딩 명시 적 :
<ItemsControl Background="Transparent" BorderBrush="Black" BorderThickness="1" Name="elementContainer" >
<ItemsControl.ItemsSource>
<Binding UpdateSourceTrigger="Explicit" Mode="OneWay" diag:PresentationTraceSources.TraceLevel="High" />
</ItemsControl.ItemsSource>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Rect.Left}" />
<Setter Property="Canvas.Top" Value="{Binding Rect.Top}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle Width="{Binding Rect.Width}" Height="{Binding Rect.Height}" Stroke="#FFE01313" ></Rectangle>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
C# 코드 :
List<Rect> mData;
DataContext = mData;
mData.Add(new Rect(20,20,20,20));
var res = elementContainer.GetBindingExpression(ItemsControl.ItemsSourceProperty);
res.UpdateTarget();
하지만 내가 가진 모든이가 기록됩니다
System.Windows.Data Warning: 101 : BindingExpression (hash=44489159): GetValue at level 0 from List`1 (hash=45943265 Count=3) using <null>: List`1 (hash=45943265 Count=3)
System.Windows.Data Warning: 80 : BindingExpression (hash=44489159): TransferValue - got raw value List`1 (hash=45943265 Count=3)
System.Windows.Data Warning: 89 : BindingExpression (hash=44489159): TransferValue - using final value List`1 (hash=45943265 Count=3)
내가 일시적으로 ObservableCollection에로 전환하고 내가 무엇을 놓치고, 일?
미리 감사드립니다.
무엇이 질문입니까? ObservableCollection이 작동하는 이유는 무엇입니까? 아니면 ItemsControl을 명시 적으로 업데이트하여 컬렉션의 데이터를 표시하는 방법은 무엇입니까? –
ItemsControl을 명시 적으로 업데이트하여 내 목록의 데이터를 표시하는 방법 – elios264
원본 속성이 준비되었음을 바인딩에 알리기 위해 INOTifyPropertyChanged를 사용해야합니다. 이 예제에서 바인딩 식을 직접 조작 할 이유는 없습니다. – McGarnagle