C00225155-02/C00225155/MegaRobo.C00225155/MegaRobo.C00225155App/MenuViews/Bottles/SampleBottleUserControl.xam...

134 lines
5.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Common.Models;
using MegaRobo.C00225155App.MenuViewModels;
using MegaRobo.C00225155App.MenuViews.Bottles;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
namespace MegaRobo.C00225155App.MenuViews
{
/// <summary>
/// BottleUserControl.xaml 的交互逻辑
/// </summary>
public partial class SampleBottleUserControl : UserControl
{
//UserControl 的 DataContext 并未设置,而是通过 SampleBottleModel 依赖属性传递数据
public SampleBottleModel SampleBottleModel
{
get { return (SampleBottleModel)GetValue(SampleBottleModelProperty); }
set { SetValue(SampleBottleModelProperty, value); }
}
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SampleBottleModelProperty =
DependencyProperty.Register(
"SampleBottleModel",
typeof(SampleBottleModel),
typeof(SampleBottleUserControl),
new PropertyMetadata(null, OnSampleBottleModelChanged)// 重要:默认值设为 nullKD
);
public SampleBottleUserControl()
{
InitializeComponent();
}
private static void OnSampleBottleModelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (SampleBottleUserControl)d;
control.InvalidateVisual();//强制重绘
var ctIndicator = control.FindName("MyCTIndicator") as CTIndicator; // 需给 CTIndicator 命名
if (ctIndicator != null)
{
ctIndicator.ForceRefresh();
// 手动更新CTValue绑定双重保障
BindingOperations.GetBindingExpression(
ctIndicator, CTIndicator.CTValueProperty
)?.UpdateTarget();
}
}
private void Bottle_MouseLeft_old(object sender, MouseButtonEventArgs e)
{
//var originalModel = this.ReactBottleModel; // 保存原始模型引用
var viewModel = new EditSampleBottlePropertiesViewModel { SampleBottle = this.SampleBottleModel };
var editWindow = new EditSampleBottlePropertiesWindow { DataContext = viewModel };
// 显示编辑属性窗口并等待用户操作
if (editWindow.ShowDialog() == true)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
// 更新自定义控件的属性
viewModel = (EditSampleBottlePropertiesViewModel)editWindow.DataContext;
var ctIndicator = this.FindName("MyCTIndicator") as CTIndicator; // 需给 CTIndicator 命名
if (ctIndicator != null)
{
ctIndicator.ForceRefresh();
}
}));
}
e.Handled = true;
}
private void Bottle_MouseLeft(object sender, MouseButtonEventArgs e)
{
// 初始化编辑视图模型 SampleBottleType
var viewModel = new EditSampleBottlePropertiesViewModel
{
SampleBottle = this.SampleBottleModel // 传递当前模型
};
var editWindow = new EditSampleBottlePropertiesWindow
{
DataContext = viewModel
};
// 显示编辑窗口并处理结果
if (editWindow.ShowDialog() == true)
{
// 低优先级执行刷新,确保编辑事务已释放
Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
// 处理父视图的编辑事务(关键)
var parentView = CollectionViewSource.GetDefaultView(this.DataContext) as ListCollectionView;
if (parentView != null)
{
if (parentView.IsEditingItem) parentView.CommitEdit();
if (parentView.IsAddingNew) parentView.CommitNew();
}
// 刷新 CTIndicator 控件
var ctIndicator = this.FindName("MyCTIndicator") as CTIndicator;
if (ctIndicator != null)
{
//ctIndicator.SampleBottle = viewModel.SampleBottle;
ctIndicator.ForceRefresh();
}
}));
}
// 释放窗口资源
editWindow.DataContext = null;
editWindow.Close();
e.Handled = true;
}
}
}