从wpf样式到viewmodel

时间:2016-03-01 03:08:58

标签: c# wpf xaml mvvm data-binding

我有一个使用两个独立项目的应用程序。一个用于包含我的ViewModel的主可执行文件,另一个用于控制应用程序的主题/样式。

在主题项目中,我定制了DataGridColumnHeader的样式以包含CheckBox。现在我如何将CheckBoxes数据绑定到我的ViewModel?

我的主题xaml

<Style x:Key='PlottableFilteringColumnHeaderStyle' TargetType='{x:Type primitives:DataGridColumnHeader}'>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type primitives:DataGridColumnHeader}">
                <Grid>
                    <themes:DataGridHeaderBorder x:Name='HeaderBorder'>
                        <Grid x:Name="GridColumnHeader">
                            <StackPanel x:Name="argStackPanel">
                                <CheckBox x:Name="argCheckBox" Content="Enable Arg" Style="{DynamicResource ResourceKey=DefaultCheckBox}" />
                            </StackPanel>
                        </Grid> 
                    </themes:DataGridHeaderBorder>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后我使用MultiBinding作为argCheckBox

public class HeaderArgConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string headerText = values[0] as string;

        if (!String.IsNullOrWhiteSpace(headerText))
        {
            FrameworkElement targetElement = values[1] as FrameworkElement;
            DataGridColumnHeader header = targetElement.TemplatedParent as DataGridColumnHeader;
            string columnName = header.DataContext != null ? header.DataContext.ToString() : "";
            var argNumber = System.Text.RegularExpressions.Regex.Match(columnName.Split(':')[0], @"\d+$").Value; // use the header text to determine which arg number

            Binding binding = new Binding("SelectedViewModel.EnableArg" + argNumber);
            binding.Source = Window.DataContextProperty;  // This is what I am unsure about
            (targetElement as CheckBox).SetBinding(CheckBox.IsCheckedProperty, binding);
        }
    }
}

我一直在&#39; BindingExpression路径错误:找不到对象&#39;&#39;&#39;错误。关于如何解决这个问题的想法,或者有更好的方法来做到这一点?

0 个答案:

没有答案