相关疑难解决方法(0)

MVVM-查看模型 - 查看模型通信

我如何使用MVVM Light让两个视图模型相互通信.我知道如何使用messenger类和注册等.这是我的场景

A Settings View ---> a Settings View Model 
                                  .
                                  .
                                  .

A MainPage View ---> A MainPage ViewModel
Run Code Online (Sandbox Code Playgroud)

如果设置视图中的某些内容发生变化,它将回复到"设置视图模型".那么我希望设置视图模型与MainPage视图模型进行通信,了解更改的内容.然后,MainPage ViewModel将告诉View.

silverlight wpf design-patterns mvvm

13
推荐指数
1
解决办法
1万
查看次数

在Structure Map中解析窗口或如何在WPF MVVM中管理多个窗口?

我一直在阅读Mark Seeman关于.NET中依赖注入的书,我很难在WPF应用程序中配置组合根.

我的容器将在应用程序启动方法中注册:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    var container = new Container();
    container.Configure(r =>
                        {
                            r.For<IAccountServices>().Use<AccountServicesProxy>();
                            r.For<MainWindow>().Use<MainWindow>();
                        });
}
Run Code Online (Sandbox Code Playgroud)

这有意义,因为应用程序启动代表我的组合根.

我的应用程序中的WPF窗口基于视图模型.视图模型使用构造函数注入.例如,我可以通过注入实现来构成视图模型IAccountServices.

在创建主窗口时,我可以在OnStartup方法中执行以下操作:

var mainWindow = container.GetInstance<MainWindow>();
mainWindow.Show();
Run Code Online (Sandbox Code Playgroud)

一旦我进入主窗口,我可能想要打开另一个窗口.到目前为止,我已经能够提出一种方法,即创建一个窗口工厂并请求窗口工厂解析窗口的实例.我必须确保窗口​​工厂在每个可能需要打开新窗口的视图模型中都可用.在我看来,这与在我的应用程序中传递IoC容器一样糟糕(服务定位器反模式会浮现在脑海中).

这种方法对你来说是否正确?我的直觉告诉我这是错的,但我还没有想出一个更好的方法来实现这个目标.

wpf dependency-injection window inversion-of-control mvvm

12
推荐指数
2
解决办法
1843
查看次数

如何绑定到WPF中的另一个控件属性

我通过命名空间使用WPF Charting ToolKit:

xmlns:ChartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns:VisualizationToolkit="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"
Run Code Online (Sandbox Code Playgroud)

我有一个图表控件,在每次Lineseries绘图时我会生成一个随机颜色.我删除数据点标记并使用以下样式着色

<Style x:Key="LineDataPointStyle" 
        TargetType="ChartingToolkit:LineDataPoint">
    <Setter Property="IsTabStop" Value="False"/>
    <Setter Property="Width" Value="NaN"/>
    <Setter Property="Height" Value="NaN"/>
    <Setter Property="Background" 
            Value="{Binding RelativeSource={RelativeSource Self}, 
                            Converter={StaticResource ColorBrushConverter}}"/>
    <Setter Property="Template">
       <Setter.Value>
          <ControlTemplate TargetType="ChartingToolkit:LineDataPoint">
             <Grid x:Name="Root" Opacity="0"/>
          </ControlTemplate>
       </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

通过LineSeries定义

<ChartingToolkit:LineSeries Title="{Binding DisplayName}" 
                            AnimationSequence="FirstToLast"
                            SnapsToDevicePixels="True" 
                            DataPointStyle="{StaticResource LineDataPointStyle}"
                            ItemsSource="{Binding Data}"
                            IndependentValueBinding="{Binding X}"
                            DependentValueBinding="{Binding Y}"/>
Run Code Online (Sandbox Code Playgroud)

现在,这工作正常,但图例标记显示的颜色与我为其生成的随机颜色不同LineSeries.我希望为它LineSeries和它Lineseries自己的图例项目显示相同的颜色.所以,我将传说项目设置如下

<Style x:Key="TestSuiteLegendItemStyle" 
      TargetType="{x:Type ChartingToolkit:LegendItem}">
    <Setter Property="IsTabStop" Value="False"/>
    <Setter Property="Template">
       <Setter.Value>
          <ControlTemplate TargetType="{x:Type ChartingToolkit:LegendItem}">
             <Border Background="{TemplateBinding Background}" 
                     BorderBrush="{TemplateBinding BorderBrush}" …
Run Code Online (Sandbox Code Playgroud)

c# wpf charts binding mvvm

4
推荐指数
1
解决办法
4187
查看次数