WPF 트리 뷰가 있습니다.트리 뷰의 개체에 종속성 속성을 사용하여 트리 뷰를 업데이트하여 개체의 변경된 값을 표시하는 방법
<DockPanel Grid.Row="2" Margin="0,6,0,0" Grid.RowSpan="5" Height="491" VerticalAlignment="Top">
<DockPanel.Resources>
<src:TreeViewFilter x:Key="MyList" />
<HierarchicalDataTemplate DataType="{x:Type src:TreeViewParent}" ItemsSource="{Binding Path=OrderAttributes}">
<TextBlock Text="{Binding Path=Name}" FontSize="16"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type src:OrderAttribute}" ItemsSource="{Binding Path=OrderAttributes}">
<TextBlock Text="{Binding Path=NameAndCount}" />
</HierarchicalDataTemplate>
</DockPanel.Resources>
<TreeView Name="treeView1" Height="490" Width="235" VerticalAlignment="Top" ItemsSource="{Binding Source={StaticResource MyList}, UpdateSourceTrigger=PropertyChanged}" TreeViewItem.Selected="treeViewFilter" />
</DockPanel>
트리 뷰 정적 자원으로 myList에 결합 TreeViewParents 개체가 TreeViewFilter 클래스 생성된다 : (데이터를 검색하기 위해 불필요한 SQL 코드를 제거) 여기서 코드이다.
public class TreeViewFilter : ObservableCollection<TreeViewParent>
{
//three tree view parents that wont change
public TreeViewParent allOrders;
public TreeViewParent batchStatus;
public TreeViewParent shippedOrders;
static TreeViewFilter currentInstance1; //maybe set to null, can only create one instance!
public TreeViewFilter()
{
currentInstance1 = this;
//Create and fill out all orders tree filter
Add(allOrders = new TreeViewParent("All Orders", 0));
//Create and fill out batch status tree filter
Add(batchStatus = new TreeViewParent("Batch Status", 0));
int untouchedCount, batchReadyCount, errorCount;
OrderAttribute untouched = new OrderAttribute("Untouched", "Batch Status", 3, untouchedCount);
OrderAttribute batchReady = new OrderAttribute("Batch Ready", "Batch Status", 3, batchReadyCount);
OrderAttribute error = new OrderAttribute("Error", "Batch Status", 3, errorCount);
batchStatus.OrderAttributes.Add(untouched);
batchStatus.OrderAttributes.Add(batchReady);
batchStatus.OrderAttributes.Add(error);
OrderManager currentInstance = OrderManager.getCurrentInstance();
}
public static TreeViewFilter getCurrentInstance()
{
return currentInstance1;
}
}
그러면 트리 뷰 부모가 주문 속성에 바인딩됩니다. Order Attributes는 자신의 Order Attributes 컬렉션을 가질 수 있습니다. (계층 필터링 트리보기) 여기
TreeViewParent 및 OrderAttribute 코드입니다 : (모두 비슷한입니다)
public class Base
{
public int classIdentifier;
}
공용 클래스 TreeViewParent : 자료 { 정적 TreeViewParent currentInstance;
public TreeViewParent(string name, int classIdent)
{
this._name = name;
this._orderAttributes = new ObservableCollection<OrderAttribute>();
classIdentifier = classIdent;
currentInstance = this;
}
public string _name;
public string Name { get { return _name; } }
ObservableCollection<OrderAttribute> _orderAttributes;
public ObservableCollection<OrderAttribute> OrderAttributes
{
get { return _orderAttributes; }
}
public static TreeViewParent getCurrentInstance()
{
return currentInstance;
}
}
공용 클래스 OrderAttribute : 자료 { 공공 문자열 parentFilter; 정적 OrderAttribute currentInstance;
public OrderAttribute(string name, string parent, int classIdent)
{
_name = name;
parentFilter = parent;
classIdentifier = classIdent;
_orderAttributes = new ObservableCollection<OrderAttribute>();
currentInstance = this;
}
public OrderAttribute(string name, string parent, int classIdent, int count)
{
_name = name;
parentFilter = parent;
classIdentifier = classIdent;
_count = count;
currentInstance = this;
}
string _name;
public int _count = 0;
public string Name { get { return _name; } }
public string NameAndCount
{
get
{
if (_count == 0)
{
return _name;
}
else
{
return _name + " (" + _count + ")";
}
}
}
ObservableCollection<OrderAttribute> _orderAttributes;
public ObservableCollection<OrderAttribute> OrderAttributes { get { return _orderAttributes; } }
public static OrderAttribute getCurrentInstance()
{
return currentInstance;
}
}
업데이트 된 NameAndCount 데이터를 업데이트하고 프로그램이 실행되고 개수가 변경됨에 따라 동적으로 변경하려면 어떻게해야합니까?
감사합니다. 아무도 그렇게 많은 코드로 대답 할 것이라고 생각하지 않았다 ... 고맙습니다! –
또 다른 질문은, 똑같은 일을하고 싶지만 문자열 대신 부울 값을 사용하는 것입니다. 어떻게이 예가 바뀌 었습니까? –