Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将控件值与具有值列表的属性绑定。有可能吗?_C#_.net_Wpf_Xaml_Data Binding - Fatal编程技术网

C# 将控件值与具有值列表的属性绑定。有可能吗?

C# 将控件值与具有值列表的属性绑定。有可能吗?,c#,.net,wpf,xaml,data-binding,C#,.net,Wpf,Xaml,Data Binding,我有一些控件(时段选择器)的窗口: 更新 但对我来说,这不是一个很好的解决方案。 也许你知道更简单的方法吗?我删除了你的设计属性,使解决方案看起来更简洁 将TimePeriodTypes列表暴露在代码中: public List<TimePeriodType> Periods = new List<TimePeriodType>() { new TimePeriodType() { Name="Hours", Max=6, Min=1 }, new

我有一些控件(时段选择器)的窗口:

更新

但对我来说,这不是一个很好的解决方案。 也许你知道更简单的方法吗?

我删除了你的设计属性,使解决方案看起来更简洁

TimePeriodType
s列表暴露在代码中:

public List<TimePeriodType> Periods = new List<TimePeriodType>() {
    new TimePeriodType() { Name="Hours",   Max=6,  Min=1  },
    new TimePeriodType() { Name="Minutes", Max=59, Min=20 }
};
现在,您可以直接将
滑块的属性
绑定到
列表框
SelectedItem
的属性(这实际上是一个
TimePeriodType
,因为之前绑定的原因):

我删除了您的设计属性以使解决方案看起来更干净

TimePeriodType
s列表暴露在代码中:

public List<TimePeriodType> Periods = new List<TimePeriodType>() {
    new TimePeriodType() { Name="Hours",   Max=6,  Min=1  },
    new TimePeriodType() { Name="Minutes", Max=59, Min=20 }
};
现在,您可以直接将
滑块的属性
绑定到
列表框
SelectedItem
的属性(这实际上是一个
TimePeriodType
,因为之前绑定的原因):

好的,我找到了解决办法。 get方法应具有以下属性:

    public class TimePeriodType {
        public string Name { set; get; }
        public int Min { set; get; }
        public int Max { set; get; }
    }

    List<TimePeriodType> _periods = new List<TimePeriodType>() { 
        new TimePeriodType() { Name="Hours", Max=6, Min=1 }, 
        new TimePeriodType() { Name="Minutes", Max=59, Min=20 }
    };

    public List<TimePeriodType> Periods {
        get { return _periods; }
        set { _periods = value; }
    }
好的,我找到了解决办法。 get方法应具有以下属性:

    public class TimePeriodType {
        public string Name { set; get; }
        public int Min { set; get; }
        public int Max { set; get; }
    }

    List<TimePeriodType> _periods = new List<TimePeriodType>() { 
        new TimePeriodType() { Name="Hours", Max=6, Min=1 }, 
        new TimePeriodType() { Name="Minutes", Max=59, Min=20 }
    };

    public List<TimePeriodType> Periods {
        get { return _periods; }
        set { _periods = value; }
    }

好啊但组合框中有6条空白记录,而不是2个名称。我应该怎么做才能只看到名称?在您的
组合框中,将
显示成员路径设置为
“名称”
;它指示控件使用每个项上的
Name
属性作为显示值。另外,我不知道为什么列表中有6项,如果绑定到只有2个对象的列表。。。你必须进一步调试它。好的。我在帖子中更正了我的XAML代码。你可以看看。也许我做错了什么。除了事件选择的remove方法Changed外,我没有在c代码中更改任何内容。我尝试通过DataContext和ItemsSource进行绑定,但效果相同。真的,我不知道列表上是否有6个元素。我不能选择任何人。但列表看起来像6个空元素(我指的是列表的高度-空白的白色矩形)。我还试图设置DisplayMemberPath=“Name”,但效果相同。我唯一看到的错误是
DisplayMemberPath=“{Binding Path=Name}”
应该是
DisplayMemberPath=“Name”
(它只是一个文本字段,不需要绑定)因此,下一步是添加一个
ItemsControl
,其
ItemsSource
与您的
组合框相同<代码>'这应该会准确地显示
组合框'绑定到的内容。好的,我只是重新阅读了您之前的评论;我认为问题在于,
组合框
的初始绑定不正确,因为
窗口(或其他根元素)的
DataContext
不正确。在
窗口(或
UserControl
等)的开始标记中添加以下属性:
DataContext=“{Binding RelativeSource={RelativeSource Self}}”
Ok。但组合框中有6条空白记录,而不是2个名称。我应该怎么做才能只看到名称?在您的
组合框中,将
显示成员路径设置为
“名称”
;它指示控件使用每个项上的
Name
属性作为显示值。另外,我不知道为什么列表中有6项,如果绑定到只有2个对象的列表。。。你必须进一步调试它。好的。我在帖子中更正了我的XAML代码。你可以看看。也许我做错了什么。除了事件选择的remove方法Changed外,我没有在c代码中更改任何内容。我尝试通过DataContext和ItemsSource进行绑定,但效果相同。真的,我不知道列表上是否有6个元素。我不能选择任何人。但列表看起来像6个空元素(我指的是列表的高度-空白的白色矩形)。我还试图设置DisplayMemberPath=“Name”,但效果相同。我唯一看到的错误是
DisplayMemberPath=“{Binding Path=Name}”
应该是
DisplayMemberPath=“Name”
(它只是一个文本字段,不需要绑定)因此,下一步是添加一个
ItemsControl
,其
ItemsSource
与您的
组合框相同<代码>'这应该会准确地显示
组合框'绑定到的内容。好的,我只是重新阅读了您之前的评论;我认为问题在于,
组合框
的初始绑定不正确,因为
窗口(或其他根元素)的
DataContext
不正确。在
窗口(或
UserControl
等)的开始标记中添加以下属性:
DataContext=“{Binding RelativeSource={RelativeSource Self}}”
<ListBox ItemsSource="{Binding Periods}"
         Name="timeType" />
<Slider Maximum="{Binding SelectedItem.Max, ElementName=timeType}"
        Minimum="{Binding SelectedItem.Min, ElementName=timeType}"
        Name="timeSlider" />
<Label Content="{Binding Value, ElementName=timeSlider}"
       Name="timeValue" />
<Label Content="{Binding Minimum, ElementName=timeSlider}"
       Name="timeValueMin" />
<Label Content="{Binding Maximum, ElementName=timeSlider}"
       Name="timeValueMax" />
    public class TimePeriodType {
        public string Name { set; get; }
        public int Min { set; get; }
        public int Max { set; get; }
    }

    List<TimePeriodType> _periods = new List<TimePeriodType>() { 
        new TimePeriodType() { Name="Hours", Max=6, Min=1 }, 
        new TimePeriodType() { Name="Minutes", Max=59, Min=20 }
    };

    public List<TimePeriodType> Periods {
        get { return _periods; }
        set { _periods = value; }
    }
ItemsSource="{Binding Periods, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"