Click here to Skip to main content
15,894,405 members
Home / Discussions / C#
   

C#

 
AnswerRe: C# Pin
BillWoodruff3-Aug-18 2:23
professionalBillWoodruff3-Aug-18 2:23 
QuestionCombining TreeView and Canvas in WPF ( MVVM ) Pin
Kenneth Haugland30-Jul-18 21:50
mvaKenneth Haugland30-Jul-18 21:50 
AnswerRe: Combining TreeView and Canvas in WPF ( MVVM ) Pin
Pete O'Hanlon30-Jul-18 23:47
mvePete O'Hanlon30-Jul-18 23:47 
GeneralRe: Combining TreeView and Canvas in WPF ( MVVM ) Pin
Kenneth Haugland31-Jul-18 2:05
mvaKenneth Haugland31-Jul-18 2:05 
AnswerRe: Combining TreeView and Canvas in WPF ( MVVM ) Pin
Gerry Schmitz31-Jul-18 13:08
mveGerry Schmitz31-Jul-18 13:08 
GeneralRe: Combining TreeView and Canvas in WPF ( MVVM ) Pin
Kenneth Haugland31-Jul-18 21:26
mvaKenneth Haugland31-Jul-18 21:26 
GeneralRe: Combining TreeView and Canvas in WPF ( MVVM ) Pin
Gerry Schmitz2-Aug-18 7:33
mveGerry Schmitz2-Aug-18 7:33 
GeneralRe: Combining TreeView and Canvas in WPF ( MVVM ) Pin
Kenneth Haugland2-Aug-18 23:56
mvaKenneth Haugland2-Aug-18 23:56 
Not initially no. But as soon as I had the treeview up and running with binding:
HTML
<TreeView x:Name="tree">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:HierarchyBase}" ItemsSource="{Binding Children}" >
            <TextBox Text="{Binding Name}"/>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

This was very neat, but now how to bind the canvas to the code behind? I thought this was very messy.
C#
public abstract class HierarchyBase : INotifyPropertyChanged
   {
       public HierarchyBase()
       {
           Delete = new RelayCommand( CanDelete, DeleteThis);
           children.CollectionChanged +=ItemChildren_CollectionChanged;
       }

       public Canvas myCanvas;
       private HierarchyBase _parent;

       private void ItemChildren_CollectionChanged(object sender,NotifyCollectionChangedEventArgs e)
       {
           //different kind of changes that may have occurred in collection
           if (e.Action == NotifyCollectionChangedAction.Add)
           {
               foreach (var item in e.NewItems)
               {
                   ((HierarchyBase)item)._parent = this;
                   ((HierarchyBase)item).myCanvas = this.myCanvas;
               }
               //((List<object>)e.NewItems).ForEach(i => ((HierarchyBase)i)._parent = this); // foreach (e.NewItems)(i => i;)

           }
           if (e.Action == NotifyCollectionChangedAction.Replace)
           {
               //your code
           }
           if (e.Action == NotifyCollectionChangedAction.Remove)
           {
               foreach (var item   in e.OldItems)
               {
                   ((HierarchyBase)item)._parent = null;
                   ((HierarchyBase)item).myCanvas = null;
               }
           }
           if (e.Action == NotifyCollectionChangedAction.Move)
           {
               //your code
           }
       }

       private ObservableCollection<HierarchyBase> children = new ObservableCollection<HierarchyBase>();


       public ObservableCollection<HierarchyBase> Children
       {
           get { return children; }
           set { children = value; }
       }

       public ICommand Delete { get; set; }

       private bool CanDelete(object obj)
       {
           return IsEnabled;
       }

       private void DeleteThis(object obj)
       {
           this._parent.Children.Remove(this);
       }

       public string Name { get; set; }

       private bool pIsEnabled = true;
       public bool IsEnabled
       {
           get { return pIsEnabled; }
           set { pIsEnabled = value;
               OnPropertyChanged();
           }
       }

       private bool pIsVisible = true;

       public bool IsVisible
       {
           get { return pIsVisible; }
           set {
               pIsVisible = value;
               OnPropertyChanged();
           }
       }

       private void StateUpdated()
       {
           if (this is IDrawing)
           {
               ((IDrawing)this).Redraw(IsVisible);
           }

           foreach (HierarchyBase child in Children)
           {
               if (!this.IsEnabled || !this.IsVisible)
               {
                   child.IsVisible = false;
               }
           }
       }

       public event PropertyChangedEventHandler PropertyChanged;

       private void OnPropertyChanged([CallerMemberName]string caller = "")
       {
           // make sure only to call this if the value actually changes

           var handler = PropertyChanged;
           if (handler != null)
           {
               handler(this, new PropertyChangedEventArgs(caller));
               StateUpdated();
           }
       }
   }


Any ideas on how to bind the canvas to the code behind in XAML? All I came up with was to bind the canvas manually to the first HierarchicalBase item when I loaded the program. I just thought I was messy and ugly.
GeneralRe: Combining TreeView and Canvas in WPF ( MVVM ) Pin
Gerry Schmitz3-Aug-18 7:54
mveGerry Schmitz3-Aug-18 7:54 
QuestionWhy does the DataTable get strings do not exceed 255 characters ? Pin
Member 245846729-Jul-18 18:55
Member 245846729-Jul-18 18:55 
AnswerRe: Why does the DataTable get strings do not exceed 255 characters ? Pin
OriginalGriff29-Jul-18 19:53
mveOriginalGriff29-Jul-18 19:53 
GeneralRe: Why does the DataTable get strings do not exceed 255 characters ? Pin
Member 245846730-Jul-18 16:11
Member 245846730-Jul-18 16:11 
AnswerRe: Why does the DataTable get strings do not exceed 255 characters ? Pin
jschell30-Jul-18 13:02
jschell30-Jul-18 13:02 
GeneralRe: Why does the DataTable get strings do not exceed 255 characters ? Pin
Gerry Schmitz31-Jul-18 12:58
mveGerry Schmitz31-Jul-18 12:58 
GeneralRe: Why does the DataTable get strings do not exceed 255 characters ? Pin
jschell19-Aug-18 6:06
jschell19-Aug-18 6:06 
AnswerRe: Why does the DataTable get strings do not exceed 255 characters ? Pin
Gerry Schmitz31-Jul-18 13:01
mveGerry Schmitz31-Jul-18 13:01 
Questionc# Stream reader text file split line into first side int, and the other side string Pin
Member 1392985029-Jul-18 4:16
Member 1392985029-Jul-18 4:16 
AnswerRe: c# Stream reader text file split line into first side int, and the other side string Pin
OriginalGriff29-Jul-18 6:09
mveOriginalGriff29-Jul-18 6:09 
QuestionCustom control not visible on parent control Pin
Ömer3328-Jul-18 11:30
Ömer3328-Jul-18 11:30 
AnswerRe: Custom control not visible on parent control Pin
Luc Pattyn28-Jul-18 13:17
sitebuilderLuc Pattyn28-Jul-18 13:17 
AnswerRe: Custom control not visible on parent control Pin
OriginalGriff28-Jul-18 20:24
mveOriginalGriff28-Jul-18 20:24 
AnswerRe: Custom control not visible on parent control Pin
Gerry Schmitz31-Jul-18 13:19
mveGerry Schmitz31-Jul-18 13:19 
Questionread text file online c# Pin
Luiz Carlos27-Jul-18 9:40
Luiz Carlos27-Jul-18 9:40 
AnswerRe: read text file online c# Pin
Dave Kreskowiak27-Jul-18 13:47
mveDave Kreskowiak27-Jul-18 13:47 
AnswerRe: read text file online c# Pin
OriginalGriff27-Jul-18 20:19
mveOriginalGriff27-Jul-18 20:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.