c# - Sql、Wpf、Xaml、C#、绑定(bind)数据、动态资源、访问非静态数据、获取对象引用

标签 c# wpf data-binding xaml dynamicresource

好吧,我对 WPF 和 XAML 还很陌生,尽管我进行了搜索,但我找不到简单的解决方案,而且在我看来,我不会很快找到答案。

问题很简单,我创建了一个 WPF 项目并在 SelectList.xaml 中有一个数据网格。一旦选择了一行,我将所选行保存在一个对象中,这个对象称为“类别”。到目前为止一切正常,但我不知道如何从其他地方 temp.xaml 获取对此对象的引用?

非常感谢 任何帮助将不胜感激 干杯

最佳答案

在 WPF 中提供间接通信的一种常见方法是利用调解器模式。您可以使用调解器来发布您的类别选择,并让临时 View 订阅类别选择更改的通知。

参见 http://www.eggheadcafe.com/tutorials/aspnet/ec832ac7-6e4c-4ea8-81ab-7374d3da3425/wpf-and-the-model-view-vi.aspx举一个具体中介的简单例子。如果您想要更健壮的实现,还有几个流行的 MVVM 框架可以提供中介模式实现。

简单的调解器实现:

public sealed class Mediator
{
    private static Mediator instance = new Mediator();
    private readonly Dictionary<string, List<Action<object>>> callbacks 
      = new Dictionary<string, List<Action<object>>>();

    private Mediator() { }

    public static Mediator Instance
    {
        get
        {
            return instance;
        }
    }

    public void Register(string id, Action<object> action)
    {
        if (!callbacks.ContainsKey(id))
        {
            callbacks[id] = new List<Action<object>>();
        }

        callbacks[id].Add(action);
    }

    public void Unregister(string id, Action<object> action)
    {
        callbacks[id].Remove(action);

        if (callbacks[id].Count == 0)
        {
            callbacks.Remove(id);
        }
    }

    public void SendMessage(string id, object message)
    {
        callbacks[id].ForEach(action => action(message));
    }
}

SelectList.xaml 代码隐藏:

private void DataGrid_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
    var category = e.AddedItems.FirstOrDefault() as Category;

    if(category != null)
    {
        Mediator.Instance.SendMessage("Category Selected", category);
    }
}

Temp.xaml 代码隐藏:

public Temp()
{
  InitializeComponent();

  Mediator.Instance.Register
  (
      "Category Selected",
      OnCategorySelected
  );
}

private void OnCategorySelected(object parameter)
{
  var selectedCategory = parameter as Category;

  if(selectedCategory != null)
  {
  }
}

关于c# - Sql、Wpf、Xaml、C#、绑定(bind)数据、动态资源、访问非静态数据、获取对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4328660/

相关文章:

c# - 在运行时重新分配事件处理程序

c# - 测试泛型方法参数是否为类

不自动生成列时出现 WPF Datagrid 绑定(bind)错误

c# - 将我的 linq 查询结果集添加到数据集,c# asp.net 3.5

javascript - Angular 下拉/数据绑定(bind)

android - 在 android 中使用数据绑定(bind)错误 : package *. *.databinding 不存在

c# - C#中不同类型的通用列表

c# - HttpWebRequest 始终显示相同的结果 C#

c# - 将 UserControl 中元素的属性绑定(bind)到 MyViewModel.cs 中的属性

mysql - WPF vb.net使用Mysql数据库填充Listview