Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
About wpfBuilder
#2
C# code:
// script "Dialog with ListView.cs"
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Data;

var d = new DialogListViewExample();
if (d.ShowDialog() != true) return;

class DialogListViewExample : Window {
    ListView _lv; //this control will display data
    List<Abc> _a; //data that will be displayed
    ComboBox _cb1, _cb2; //other controls
    
    //listview item data type example
    record Abc(string Name, string Value) { }
    
    public DialogListViewExample() {
        //create dialog
        Title = "ListView example";
        var b = new wpfBuilder(this).WinSize(600, 500).Columns(-1, -1, 70);
        b.R.Add(out _cb1).Items("|ffff|gggg");
        b.Add(out _cb2).Items("|vvvv|nnnn");
        b.AddButton("Update", _ => _Update());
        b.Row(-1).Add(out _lv);
        b.End();
        
        //add listview columns and bind to data
        var gv = new GridView { AllowsColumnReorder = false };
        gv.Columns.Add(new() { Header = "A", Width = 150, DisplayMemberBinding = new Binding("Name") { Mode = BindingMode.OneTime } });
        gv.Columns.Add(new() { Header = "B", Width = 300, DisplayMemberBinding = new Binding("Value") { Mode = BindingMode.OneTime } });
        _lv.View = gv;
        
        //data
        _a = new() {
            new("One", "jhsjhjs"),
            new("Two", "mcnvmncm"),
        };
        _lv.ItemsSource = _a;
        
        //item selected event
        _lv.SelectionChanged += (_, e) => {
            if (_lv.SelectedItem is Abc x) {
                print.it("selected", x);
            }
        };
        
        //item double-clicked event
        _lv.PreviewMouseDoubleClick += (o, e) => {
            e.Handled = true;
            if (e.ChangedButton == MouseButton.Left && _EventItemData(e) is Abc x) {
                print.it("double-clicked", x);
            }
        };
        
        //context menu event
        _lv.ContextMenuOpening += (o, e) => {
            e.Handled = true;
            if (_EventItemData(e) is Abc x) {
                print.it("context menu", x);
            } else {
                print.it("context menu");
            }
        };
        
        //b.Loaded += () => {
        
        //};
        
#if WPF_PREVIEW //menu Edit -> View -> WPF preview
b.Window.Preview();
#endif
        
        //b.OkApply += e => {
        
        //};
    }
    
    //example of updating data
    void _Update() {
        _a.RemoveAt(0);
        _a.Add(new("Three", "qwwqewe"));
        _lv.ItemsSource = null;
        _lv.ItemsSource = _a;
    }
    
    static DependencyObject _EventItem(RoutedEventArgs e) => ((ItemsControl)e.Source).ContainerFromElement(e.OriginalSource as DependencyObject);
    
    static object _EventItemData(RoutedEventArgs e) => _EventItem(e) is ContentControl c ? c.Content : null;
}


Messages In This Thread
About wpfBuilder - by marktech - 09-25-2022, 10:02 PM
RE: About wpfBuilder - by Gintaras - 09-26-2022, 05:47 AM
RE: About wpfBuilder - by Gintaras - 09-26-2022, 06:43 PM
RE: About wpfBuilder - by marktech - 09-27-2022, 01:23 AM

Forum Jump:


Users browsing this thread: 1 Guest(s)