런타임시 내 ListBox를 ObservableCollection에 바인딩합니다. 버튼을 클릭하면 내 컬렉션의 항목 중 하나가 수정되지만 해당 ListBox 항목은 그에 따라 업데이트되지 않습니다. 나는 몇 가지 비슷한 SO 기사 및 기타 도움말 자료를 통해 갔는데 나는 그들이 요구 한 모든 것을하고있는 것 같지만 운이 없다. 모든 것이 올바르게로드되고 바인딩되는 것처럼 보이지만 컬렉션의 항목에 "IsLoading"속성을 변경하면 IsLoading 속성에 바인딩 된 Grid의 Visibility (아래 DataTemplate 참조)가 변경되지 않습니다. 여기WPF ListBox : ObservableCollection에 바인딩
<ListBox Name="lstItems">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Name="ListBoxGrid">
<Grid.RowDefinitions>
<RowDefinition Height="120"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" IsChecked="{Binding IsSelected}" />
<Image Grid.Column="1" Width="50" Stretch="Uniform" Source="{Binding Image}" />
<TextBlock Grid.Column="2" Text="{Binding Path=ImageFilePath}" />
<Grid Grid.Column="3" Visibility="{Binding IsLoading, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True, Mode=TwoWay, BindsDirectlyToSource=True, Converter={StaticResource BooleanToVisibilityConverter1}}">
<my:LoadingAnimation x:Name="SendAnimation" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
그리고 내 BO의 : 다음
내옵니다의 XAML입니다
public class Order : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public bool IsSelected { get; set; }
public string ImageFilePath { get; set; }
public ImageSource Image { get; set; }
private bool mIsSending = false;
public bool IsSending
{
get { return mIsSending; }
set
{
mIsSending = value;
if (PropertyChanged != null)
PropertyChanged(null, new PropertyChangedEventArgs("IsSending"));
}
}
}
은 내가 컬렉션을 생성하고 바인딩하는 방법이 있습니다 :
ObservableCollection<Order> mOrders = new ObservableCollection<Order>();
public MainWindow()
{
InitializeComponent();
lstItems.ItemsSource = mOrders;
}
BindsDirectlyToSource = False로 설정하면 어떻게됩니까? – Klaus78
@ Klaus78 : 감사합니다 클라우스. 아래 내 대답을 참조하십시오. 나는 또한 다른 바인딩 속성이 필요 없다는 것을 알아 냈습니다. 따라서 Visibility = "{Binding IsSending, Converter = {StaticResource BooleanToVisibilityConverter1}}"과 같이 사용할 수 있습니다. – dotNET